【问题标题】:ereg_replace to preg_replace?ereg_replace 到 preg_replace?
【发布时间】:2011-01-27 11:37:52
【问题描述】:

如何转换

ereg_replace(".*\.(.*)$","\\1",$imgfile);

preg_replace... ?

?

我遇到了麻烦?

【问题讨论】:

    标签: php regex pcre posix-ere


    【解决方案1】:

    分隔符,在表达式的开头和结尾添加任何字符,在这种情况下,按照传统,'/' 字符 preg_replace('/.*\.(.*)$/',"\\1",$imgfile); 正则表达式不是很好,最好使用 strrpos 并采用 substr()。

    正则表达式很慢,使用它。 $extension=substr($imgName,strrpos($imgName,'.'));

    【讨论】:

    • 我知道但有这个问题; preg_replace() [function.preg-replace]:C:\wamp\www..中的未知修饰符“$”。
    • 是的,我的错,而且编辑似乎破坏了表达。最后最好在这种情况下使用 substr() 。你也可以使用 preg_match。
    • 你可以用反引号转义你的代码(见stackoverflow.com/editing-help)。 $ 修复看起来不错。
    【解决方案2】:
    preg_replace("/.*\.(.*)$/", "\\1", "foo.jpg")
    

    我不知道为什么 PHP 需要 / 分隔符。 Perl、JS 等拥有它们的唯一原因是它们允许正则表达式文字,而 PHP 不允许。

    【讨论】:

    • 这是因为他们选择使用单个字符串来提供修饰符和正则表达式模式。 "/[a-z]/i".
    • 参见php.net/manual/en/regexp.reference.delimiters.php .. 例如,$a = 'string/with/slashes'; $b = preg_replace('#/with/#', '-without-', $a); 是有效的,将$b 设置为string-without-slashes,并且您不必在给preg_replace 的正则表达式中转义/ .
    【解决方案3】:

    您应该知道将 ereg 模式移植到 preg 的 4 个主要事项:

    1. 添加分隔符(/):'pattern' => '/pattern/'

    2. 转义分隔符如果它是模式的一部分:'patt/ern' => '/patt\/ern/'
      通过以下方式以编程方式实现它:
      $ereg_pattern = '<div>.+</div>';
      $preg_pattern = '/' .addcslashes($ereg_pattern, '/') . '/';

    3. eregi(不区分大小写匹配):'pattern' => '/pattern/i' 所以,如果 您正在使用 eregi 函数进行不区分大小写的匹配,只需添加 'i' 在新模式的末尾('/pattern/')。

    4. ASCII值:在ereg中,如果你在模式中使用数字,它是 假设您指的是字符的 ASCII。但在 preg, number 不被视为 ASCII 值。所以,如果你的模式 在 ereg 表达式中包含 ASCII 值(例如:换行, 制表符等)然后将其转换为十六进制并在其前面加上 \x。
      Example: 9(tab) becomes \x9 or alternatively use \t.

    希望这会有所帮助。

    【讨论】:

    猜你喜欢
    • 2012-10-01
    • 2012-03-09
    • 2012-01-28
    • 1970-01-01
    • 2013-08-06
    • 2013-05-30
    • 2015-06-22
    • 2012-07-20
    • 1970-01-01
    相关资源
    最近更新 更多