以任何顺序使用正则expression式的多个单词
正如标题所说,我需要在一个句子中find两个特定的单词。 但他们可以以任何顺序和任何套pipe。 我如何去做这个使用正则expression式?
例如,我需要从下面的句子中提取单词test
和long
是否来自first或long
这个单词。
This is a very long sentence used as a test
更新:我没有提到的第一部分是它也需要不区分大小写。
如果要提取匹配项,请使用捕获组:(test)|(long)然后,根据使用的语言,例如,可以使用$ 1和$ 2来引用匹配的组。
您可以使用
(?=.*test)(?=.*long)
来源: MySQL SELECT LIKE或REGEXP匹配一个logging中的多个单词
我认为(总是危险的),你想find整个单词,所以“testing”将相匹配,但“testing”不会。 因此,模式必须search字边界,所以我使用“\ b”字边界模式。
/(?i)(\btest\b.*\blong\b|\blong\b.*\btest\b)/
尝试这个:
/(?i)(?:test.*long|long.*test)/
这将匹配test
,然后long
,或long
,然后test
。 它会忽略大小写的差异。
不知道什么语言
/test.*long/
要么
/long.*test/
要么
/test/ && /long/
我用libpcre和C,在那里我可以定义标注。 他们帮助我轻松地匹配不只是单词,而是任何次序的任何子expression。 正则expression式看起来像:
(?C0)(expr1(?C1)|expr2(?C2)|...|exprn(?Cn)){n}
标注函数会保护每个子expression式只匹配一次,如:
int mycallout(pcre_callout_block *b){ static int subexpr[255]; if(b->callout_number == 0){ //callout (?C0) - clear all counts to 0 memset(&subexpr,'\0',sizeof(subexpr)); return 0; }else{ //if returns >0, match fails return subexpr[b->callout_number-1]++; } }
像这样的东西也应该可能在Perl中。
我不认为你可以用一个正则expression式。 你需要达到逻辑与二 – 一个search每个单词。