正则表达式多字搜索

Wes*_*s P 6 regex string

我用什么来搜索字符串中的多个单词?我希望逻辑操作是AND,以便所有单词都在字符串中的某个地方.我有一堆无意义的段落和一个简单的英文段落,我想通过指定几个常用词来缩小它,例如"the"和"and",但希望它与我指定的所有单词匹配.

小智 11

正则表达式支持"环视"条件,允许您在字符串中搜索一个术语,然后忘记结果的位置; 从字符串的开头开始,用于下一个搜索词.这将允许以任何顺序搜索字符串以查找一组单词.

这个的正则表达式是:

^(?=.*\bword1\b)(?=.*\bword2\b)(?=.*\bword3\b)
Run Code Online (Sandbox Code Playgroud)

\b字边界在哪里,?=是环绕修改器.

如果您要搜索的单词数量可变,则需要使用循环构建此正则表达式字符串 - 只需在环视语法中包装每个单词并将其附加到表达式.


Mar*_*rot 5

AND作为串联

^(?=.*?\b(?:word1)\b)(?=.*?\b(?:word2)\b)(?=.*?\b(?:word3)\b)
Run Code Online (Sandbox Code Playgroud)

OR作为交替

^(?=.*?\b(?:word1|word2|word3)\b
^(?=.*?\b(?:word1)\b)|^(?=.*?\b(?:word2)\b)|^(?=.*?\b(?:word3)\b)
Run Code Online (Sandbox Code Playgroud)


Vin*_*vic 2

也许使用语言识别图来识别英语会起作用。一些快速测试似乎有效(这假设段落仅由换行符分隔)。

\n\n

正则表达式将匹配任何这些条件之一... \\bword\\b 是由边界分隔的单词 word\\b 是一个单词结尾,并且 just word 将在要匹配的段落的任何位置进行匹配。

\n\n
my @paragraphs = split(/\\n/,$text);\nfor my $p (@paragraphs) {\n    if ($p =~ m/\\bthe\\b|\\band\\b|\\ban\\b|\\bin\\b|\\bon\\b|\\bthat\\b|\\bis\\b|\\bare\\b|th|sh|ough|augh|ing\\b|tion\\b|ed\\b|age\\b|\xe2\x80\x99s\\b|\xe2\x80\x99ve\\b|n\xe2\x80\x99t\\b|\xe2\x80\x99d\\b/) {\n       print "Probable english\\n$p\\n";\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n