小智 11
正则表达式支持"环视"条件,允许您在字符串中搜索一个术语,然后忘记结果的位置; 从字符串的开头开始,用于下一个搜索词.这将允许以任何顺序搜索字符串以查找一组单词.
这个的正则表达式是:
^(?=.*\bword1\b)(?=.*\bword2\b)(?=.*\bword3\b)
Run Code Online (Sandbox Code Playgroud)
\b字边界在哪里,?=是环绕修改器.
如果您要搜索的单词数量可变,则需要使用循环构建此正则表达式字符串 - 只需在环视语法中包装每个单词并将其附加到表达式.
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)
也许使用语言识别图来识别英语会起作用。一些快速测试似乎有效(这假设段落仅由换行符分隔)。
\n\n正则表达式将匹配任何这些条件之一... \\bword\\b 是由边界分隔的单词 word\\b 是一个单词结尾,并且 just word 将在要匹配的段落的任何位置进行匹配。
\n\nmy @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}\nRun Code Online (Sandbox Code Playgroud)\n