0

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

cash 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+电话+%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';
}

从本质上讲,它似乎被这个@符号呛住了——我似乎无法逃脱。

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

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

4

2 回答 2

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/'.'/'
     ^--        ^--

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

于 2013-08-13T18:16:10.547 回答
0
preg_match("/\@\d\d:\d\d/ims", "<input string>", $matches)

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

于 2013-08-13T18:21:25.260 回答