2010-03-14 40 views

回答

11
preg_replace("/.*\.(.*)$/", "\\1", "foo.jpg") 

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

+8

这是因为他们选择使用单个字符串来提供修饰符和正则表达式模式。 ' “/ [A-Z]/I”'。 – kennytm 2011-04-08 16:09:27

1

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

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

+0

我知道但有这个问题; preg_replace()[function.preg-replace]:C:\ wamp \ www中的未知修饰符'$'.. – sml 2010-03-14 21:48:33

+0

是的,我的不好,也是编辑似乎破坏了表达式。最后最好在这种情况下使用substr()。你也可以使用preg_match。 – 2010-03-14 21:52:30

+0

您可以使用反引号将您的代码转义(请参阅http://stackoverflow.com/editing-help)。 $修正看起来不错。 – 2010-03-14 21:57:32

15

你应该知道的4周主要的事情端口额日格图案浸渍料:

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

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

  3. eregi(不区分大小写匹配):'pattern' => '/pattern/i'所以,如果 您使用eregi函数的情况下insenstive匹配,只需添加 '我' 在新格局的结束('/模式/')。

  4. ASCII值:在额日格,如果在模式中使用数字,它是 假设你指的是一个字符的ASCII码。但在 preg中,数字不被视为ASCII值。因此,如果您的模式 在ereg表达式中包含ASCII值(例如:新行, 选项卡等),那么将其转换为十六进制并以\ x为前缀。
    Example: 9(tab) becomes \x9 or alternatively use \t.

希望这会有所帮助。

+0

有一个内置的转义分隔符之间的正则表达式字符串http://php.net/manual/en/function.preg-quote.php – 2017-06-16 20:18:45