PHP正则表达式:匹配包含复杂字符集的匹配的若干包含/排除规则
考虑项目集合。每个项目可能没有,分配一个或多个标签。标记名称可能由任何有效的unicode字符组成,除了空格(空格,换行符等)。每个项目的tag
属性是空格分隔的标签列表,例如, tag1 tag2 tag3
。PHP正则表达式:匹配包含复杂字符集的匹配的若干包含/排除规则
我目前正在研究一个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#
之外的字符。
适合我,谢谢! – muffel
您的欢迎;)。 –
工作的示例:
^(?=.*(?<!\S)[email protected](?!\S).*)(?!.*(?<!\S)_bar#(?!\S).*).*
而不是一个单词边界之前我和标签后,已经没有维护自己的空白。单词边界是两个查找表的组合;在这种情况下,您只需要两个中的一个(两次)。
- 标志:G,M
- 步骤:270
如若'包含.foo#''匹配... FOO#%'或'abc.foo#DEF '或'(SPACES).foo#'? – Toto