使用正则表达式的任何顺序的多个单词

RC1*_*140 47 regex

正如标题所说,我需要在一个句子中找到两个特定的单词.但它们可以是任何顺序和任何外壳.我如何使用正则表达式执行此操作?

例如,我需要提取单词,testlong从下面的句子中提取单词test是第一个还是long来自.

This is a very long sentence used as a test
Run Code Online (Sandbox Code Playgroud)

更新:我在第一部分中没有提到的是它也需要不区分大小写.

vel*_*lop 37

您可以使用

(?=.*test)(?=.*long)
Run Code Online (Sandbox Code Playgroud)

来源:MySQL SELECT LIKE或REGEXP匹配一条记录中的多个单词

  • 这失败了.https://regex101.com/r/Z8KOLp/2 (3认同)
  • 另一种变体:[`(?is)^(?=.*\b(test)\ b)(?=.*?\ b(long)\ b).*`](https://regex101.com/ r/CPNu4y/1)它也捕获单词并匹配所有字符串.进一步锚定到`^`start,大大提高了性能.`\ b`匹配*字边界*. (3认同)
  • 当然,但要求是找到/提取单词,而不是简单地测试它们. (2认同)

Pau*_*och 9

我认为(总是危险的)你想找到整个单词,所以"test"会匹配,但"testy"不会.因此模式必须搜索字边界,所以我使用"\ b"字边界模式.

/(?i)(\btest\b.*\blong\b|\blong\b.*\btest\b)/
Run Code Online (Sandbox Code Playgroud)


小智 7

如果要提取匹配项,请使用捕获组:(测试)|(长)然后,根据使用的语言,您可以使用$ 1和$ 2来引用匹配的组.

  • 鉴于要求是匹配 test AND long,此解决方案需要 g 标志。 (4认同)

gho*_*g74 5

不知道什么语言

 /test.*long/ 
Run Code Online (Sandbox Code Playgroud)

要么

/long.*test/
Run Code Online (Sandbox Code Playgroud)

要么

/test/ && /long/
Run Code Online (Sandbox Code Playgroud)

  • 我会添加单词边界,例如`/ \ btest \ b /`。 (2认同)