PHP正则表达式:为由复杂字符集组成的匹配匹配匹配多个包含/排除规则
考虑一组项目。每个项目可能没有、一个或多个标记。标记名可以由除空格(空格、换行符等)以外的任何有效unicode字符组成。每个项目的PHP正则表达式:为由复杂字符集组成的匹配匹配匹配多个包含/排除规则,php,regex,pcre,Php,Regex,Pcre,考虑一组项目。每个项目可能没有、一个或多个标记。标记名可以由除空格(空格、换行符等)以外的任何有效unicode字符组成。每个项目的tag属性是一个以空格分隔的标记列表,例如tag1 tag2 tag3 我目前正在开发一个PHP函数,该函数可以过滤那些确实包含一组特定标记的所有项,另一方面,不允许包含其他一些项 目前,我生成了一个正则表达式,如 /^(?=.*\bfoo\b)(?=.*\bbar\b)(?!.*\bbaz\b).*$/ 退出搜索查询。此表达式匹配所有包含foo和bar但不包含b
tag
属性是一个以空格分隔的标记列表,例如tag1 tag2 tag3
我目前正在开发一个PHP函数,该函数可以过滤那些确实包含一组特定标记的所有项,另一方面,不允许包含其他一些项
目前,我生成了一个正则表达式,如
/^(?=.*\bfoo\b)(?=.*\bbar\b)(?!.*\bbaz\b).*$/
退出搜索查询。此表达式匹配所有包含foo
和bar
但不包含baz
的tag
属性。当标记以单词字符开头和结尾时,这一点非常有效,但在其他情况下(例如,对于以点或哈希符号开头或结尾的标记),则停止工作,因为单词边界锚点仅适用于单词字符
你知道我如何修改像.foo#
这样的标签的正则表达式吗
该解决方案应在PHP 5.5+上受支持。我认为您正在生成模式,如果是,您可以使用如下模式:
/^(?=.*(\W|^)foo(\W|$))(?=.*(\W|^)bar(\W|$))(?!.*(\W|^)baz(\W|$)).*$/
如果没有,您只需将那些字符置于\bfoo\b
之外,如\.\bfoo\b
一个工作示例:
^(?=.*
我没有使用单词边界,而是声明标记前后没有空格。单词边界是两个lookaround的组合;在本例中,您只需要其中一个(两次)
- 国旗:g,m
- 步骤:270
应该.foo#
匹配…foo#.%
或abc.foo#def
或(空格).foo#
?