使用preg_match在正则表达式中转义@符号

时间:2013-08-13 18:10:42

标签: php preg-match

我正在构建一个处理某些事务的应用程序,其描述如下:

  

现金bnkm aug09:bt phone / a @ 19:10

我需要使用preg_match使用正则表达式从这些字符串中提取时间。 我写了一个可以在这个网站上运行的正则表达式:

http://www.switchplane.com/awesome/preg-match-regular-expression-tester?pattern=%2F%40%5Cd%5Cd.%5Cd%5Cd%2F&subject=cash+bnkm++++aug09+%3A+bt+phone+%2F+a%4019%3A10

但不是在我的代码中,因为给出了Warning: preg_match(): Unknown modifier '@'错误。

我正在使用的正则表达式为:/@\d\d.\d\d/,对preg_match的调用如下:

$matches = array();
if (preg_match('/'.'/@\d\d.\d\d/'.'/', 'cash bnkm    aug09 : bt phone / a@19:10', $matches) === 1) {
    //Carry out trigger
    echo 'yes';
} else {
    echo 'no';
}

基本上它似乎在@符号上窒息 - 我似乎无法逃脱。

我对正则表达式很新,但找不到@作为特殊字符使用的任何描述,所以假设它将用于测试字符串而不是改变字符串的测试方式

如何解决此问题的任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

试试这个:

if (preg_match('/@\d\d:\d\d/', 'cash bnkm    aug09 : bt phone / a@19:10', $matches) === 1) {
    //Carry out trigger
    echo 'yes';
    print_r($matches);//Array ( [0] => @19:10 ) 
} else {
    echo 'no';
}

在你的模式中有两个额外的斜杠:

'/'.'/@\d\d.\d\d/'.'/'
     ^--        ^--

如果@未用作分隔符,则无需转义

答案 1 :(得分:0)

preg_match("/\@\d\d:\d\d/ims", "<input string>", $matches)

使用\转义特殊字符,@是分隔符。