我正在使用 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使用Regex Tester试用了它 . 我究竟做错了什么?
以上结果在使用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的版本问题 . 还有什么可能导致特定服务器上的此行为?