Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
匹配包含列表中所有单词的短语-regex_Regex - Fatal编程技术网

匹配包含列表中所有单词的短语-regex

匹配包含列表中所有单词的短语-regex,regex,Regex,我有这样的短语: computer keyboard computer keyboard black computer keyboard black mouse 然后我有一个单词数组,但我只想在每个单词都与数组中的一个条目匹配时返回短语 以下是一个示例阵列: ["keyboard","computer","black"] 我想匹配“计算机键盘”和“计算机键盘黑”,但不匹配“计算机键盘黑鼠标”,因为单词列表中不存在鼠标 以下是我目前掌握的情况: (?=.*?(keyboard|computer

我有这样的短语:

computer keyboard
computer keyboard black
computer keyboard black mouse
然后我有一个单词数组,但我只想在每个单词都与数组中的一个条目匹配时返回短语

以下是一个示例阵列:

["keyboard","computer","black"]
我想匹配“计算机键盘”和“计算机键盘黑”,但不匹配“计算机键盘黑鼠标”,因为单词列表中不存在鼠标

以下是我目前掌握的情况:

(?=.*?(keyboard|computer|black)).*
唯一的问题是,显然,这仍然与第三个短语相匹配。这可以使用正则表达式吗?

尝试在多行
m
模式下使用
^(?:(?:键盘|计算机|黑色)(?:|$)+$

这意味着:

^$-匹配必须从行首到行尾

(?:…)+
-分组重复一次或多次

(?:键盘|计算机|黑色)(?:|$)
-以空格或行尾结尾的三个单词之一

所有组都不捕获
?:
,因为您只需要完整的短语


演示:

谢谢Sergey-works,但现在postgresql抱怨“正则表达式太复杂了”