如何在正则表达式中匹配多个单词
Posted
技术标签:
【中文标题】如何在正则表达式中匹配多个单词【英文标题】:How to match multiple words in regex 【发布时间】:2011-07-22 06:32:43 【问题描述】:只是一个简单的正则表达式,我不知道怎么写。
正则表达式必须确保字符串匹配所有 3 个单词。我知道如何使它匹配 3 个中的 任何:
/advancedbrain|com_ixxocart|p\=completed/
但我需要确保 所有 3 个单词都出现在字符串中。
这里是单词
-
高级大脑
com_ixxocart
p=完成
【问题讨论】:
因此,作为示例字符串,您有 'blah blah sample text advancebrain where #com_ixxocart blah blahp=completedstuff' ? 我个人会用 3 个正则表达式来做到这一点;它可能只是一个很丑陋,而且可能更慢。 这些来自查询字符串吗?如果是这样,您可能不需要使用任何正则表达式 我必须将它插入到谷歌分析给我的一个输入中。所以,我只能使用一个正则表达式。 【参考方案1】:^(?=.*?p=completed)(?=.*?advancebrain)(?=.*?com_ixxocart).*$
花费了太长时间的测试和改进 =/ 哦,好吧.. 仍然会发布我的答案
【讨论】:
【参考方案2】:使用前瞻:
(?=.*\badvancebrain)(?=.*\bcom_ixxocart)(?=.*\bp=completed)
顺序无关紧要。这三个都是必需的。
【讨论】:
最好在开始时锚定正则表达式,否则如果不是所有三个都存在,您将获得可怕的性能。【参考方案3】:使用lookahead assertions:
^(?=.*advancebrain)(?=.*com_ixxochart)(?=.*p=completed)
如果所有三个词都存在则匹配。
如果需要避免这种情况,您可能需要在搜索词周围添加 \b
工作边界,以确保它们匹配为完整的词而不是其他词的子字符串(如 advancebraindeath
):
^(?=.*\badvancebrain\b)(?=.*\bcom_ixxochart\b)(?=.*\bp=completed\b)
【讨论】:
我只得到了一个输入字段来放入这个正则表达式,它用于谷歌分析。他们展示了一个简单的 /yourregex/ 示例。你猜先行会起作用吗?我不知道他们将使用什么编程语言来运行正则表达式。 看起来 GA (Google Analytics) 支持前瞻。 lunametrics.com/blog/2007/08/08/… 对于像 go 这样不支持前瞻的语言有解决方法吗? @klew:您需要对所有可能的排列进行硬编码,因此对于检查a
、b
和 c
是否以任何顺序出现的正则表达式,您需要搜索a.*b.*c|a.*c.*b|b.*a.*c|b.*c.*a|c.*a.*b|c.*b.*a
。
这当然容易出错并且扩展性极差,因此最好执行三个单独的正则表达式调用,每个条件一个,并确保所有三个匹配。以上是关于如何在正则表达式中匹配多个单词的主要内容,如果未能解决你的问题,请参考以下文章