我遇到了一点麻烦,为我的特殊情况提出一个正则表达式。这是我有的。
"#<call:('d+)>(?:(?!'/MM).)+?('s+)?(?='<)#ims"
我需要匹配下面的例子。
<call:5>anything <
但是我不想匹配这个…
<call:5>anything/mm <
工作正常,但问题是它不匹配这个…
<call:5>anything/mmm <
我需要正则表达式来匹配anything
,前提是anything
不以/mm
结束。我知道这是我忽略的一件小事,但你能指出我做错了什么吗?
如果可以假设要匹配的call
标记内容将不包含
- 字符后面的空格(允许吗?)
/mm
字符串或 -
<
字符(末尾除外),
下面的代码似乎可以工作:
<call:('d+)>(?:(?!'/mm['s<]).)+?('s+)?(?='<)
编辑:我认为极端情况也可以解决,试试这个:
<call:('d+)>(?:(?!'/mm's*?<).)+?('s+)?(?='<)
你想说的是,如果匹配以/mm <
结束,那么它是无效的?
if (preg_match('%<call:('d+)>(?!.*/mm <'z)(.*)%sim', $subject)) {
# Successful match
} else {
# Match attempt failed
}
如果所有的行都以/m或/mmm结尾,并且你想要"任何",你可以添加'%<call:('d+)>(?!.*/mm <'z)(.*)(?:/m+ <)%sim'