我使用preg_match_all()
在用户模板中搜索某些自定义标记。但是,该函数不匹配包含$
字符的字符串。
模板代码可以采用两种形式:[TagName]
和[TagName|some text here|some other text here]
。
以下是我正在使用的正则表达式:
preg_match_all('/\[([^\]\|]+)(\|)?([^\]\|]*)\|?([^\]\|]*)\]/',$thank_you_screen_text,$thank_you_tags,PREG_SET_ORDER);
这些字符串都匹配:
[Name1]
[AddTour|Yes!|no]
[NumberOfPersonsForRoomOut| x 2889 =| ]
[CardholderName|Cardholder's Name:|]
但是,其中包含$
个字符的任何字符串都会失败。它根本不匹配字符串。这些根本不匹配:
[NumberOfPersonsForRoomOut| x $2889 =| ]
[NumberOfPersonsForRoomOut| x \$2889 =| ]
[RoomSubtotalOut|\$|]
我已经在regex101.com and it works there使用正则表达式测试程序进行了尝试。我做错了什么?
以上结果是在使用PHP 5.5.22和PCRE Library Version 8.34 2013-12-15的服务器上进行的。
但是,我在其他几台服务器上试过它,一切都像我期望的那样匹配!其他服务器是PHP 5.5.38 / PCRE 8.38和PHP 5.5.15 / PCRE 8.34。它似乎不是PCRE的版本问题。还有什么可能导致特定服务器上的这种行为?