使用preg_match对正则表达式中的@符号进行转义


Escaping @ symbol in regular expression using preg_match

我正在构建一个应用程序,该应用程序处理一些带有以下描述的事务:

现金bnkm 8月9日:bt电话/a@19:10

我需要使用preg_match使用正则表达式从这些字符串中提取时间。我已经写了一个正则表达式,在这个网站上工作:

http://www.switchplane.com/awesome/preg-match-regular-expression-tester?pattern=%2F%40%5Cd%5Cd.%5Cd%5Cd%2F&主题=现金+bnkm++++aug09+%3A+bt+电话+%2F+a%4019%3A10

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

我使用的regex是:/@'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';
}

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

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

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

试试这个:

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

如果@未用作分隔符,则无需对其进行转义

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

使用'来转义特殊字符,@是一个分隔符。