ereg_replace 到 preg_replace?
我怎样才能转换
ereg_replace(".*\.(.*)$","\\1",$imgfile);
为
preg_replace... ?
?
我有麻烦吗?
How can I convert
ereg_replace(".*\.(.*)$","\\1",$imgfile);
to
preg_replace... ?
?
I'm having trouble with it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
将 ereg 模式移植到 preg 时,您应该了解 4 个主要知识:
添加分隔符(/):
'pattern' =>; '/pattern/'
转义分隔符(如果它是模式的一部分):
'patt/ern' =>
'/patt\/ern/'
通过以下方式以编程方式实现它:
$ereg_pattern = '
.+
';
$preg_pattern = '/' .addcslashes($ereg_pattern, '/') 。 '/';
eregi(不区分大小写匹配):
'pattern' =>; '/pattern/i'
所以,如果您正在使用 eregi 函数进行不区分大小写的匹配,只需添加
'i' 位于新模式('/pattern/')的末尾。
ASCII 值:在 ereg 中,如果在模式中使用数字,则它是
假设您指的是字符的 ASCII。但在
preg, number 不被视为 ASCII 值。所以,如果你的模式
ereg 表达式中包含 ASCII 值(例如:换行符、
制表符等),然后将其转换为十六进制并以 \x 为前缀。
示例:9(tab) 变为 \x9 或使用 \t。
希望这会有所帮助。
You should know 4 main things to port ereg patterns to preg:
Add delimiters(/):
'pattern' => '/pattern/'
Escape delimiter if it is a part of the pattern:
'patt/ern' =>
'/patt\/ern/'
Achieve it programmatically in following way:
$ereg_pattern = '<div>.+</div>';
$preg_pattern = '/' .addcslashes($ereg_pattern, '/') . '/';
eregi(case-insensitive matching):
'pattern' => '/pattern/i'
So, ifyou are using eregi function for case insenstive matching, just add
'i' in the end of new pattern('/pattern/').
ASCII values: In ereg, if you use number in the pattern, it is
assumed that you are referring to the ASCII of a character. But in
preg, number is not treated as ASCII value. So, if your pattern
contain ASCII value in the ereg expression(for example: new line,
tabs etc) then convert it to hexadecimal and prefix it with \x.
Example: 9(tab) becomes \x9 or alternatively use \t.
Hope this will help.
我不知道为什么 PHP 需要
/
分隔符。 Perl、JS 等拥有它们的唯一原因是它们允许正则表达式文字,而 PHP 不允许。I don't know why PHP requires the
/
delimiters. The only reason Perl, JS, etc. have them is that they allow regex literals, which PHP doesn't.分隔符,将任何字符添加到表达式的开头和结尾,在本例中,按照传统,“/”字符
preg_replace('/.*\.(.*)$/',"\\1", $imgfile);
正则表达式不是很好,最好使用 strrpos 并采用 substr()。正则表达式很慢,使用这个。
$extension=substr($imgName,strrpos($imgName,'.'));
delimiters, add any char to beginning and end of expression, in this case, and by tradition, the '/' character
preg_replace('/.*\.(.*)$/',"\\1",$imgfile);
The regex isn't very good, better to use strrpos and take substr().Regex is slow, use this.
$extension=substr($imgName,strrpos($imgName,'.'));