2017-05-28 31 views
1

我有短語,因爲這樣的:匹配一個詞組,如果它包括從列表中的所有單詞 - 正則表達式

computer keyboard 
computer keyboard black 
computer keyboard black mouse 

然後我有話的數組,但我只想要回短語時,每一個字匹配數組中的一個條目。

下面是一個例子數組:

["keyboard","computer","black"] 

我想匹配「計算機鍵盤」和「計算機鍵盤黑」,而不是「計算機鍵盤黑色的鼠標」,因爲鼠標不存在中單詞列表。

這是我到目前爲止有:

(?=.*?(keyboard|computer|black)).* 

唯一的問題是,顯然,這仍然爲第三短語匹配。這可能使用正則表達式嗎?

回答

1

嘗試在多m模式使用^(?:(?:keyboard|computer|black)(?: |$))+$ ...

這意味着:

^ ... $ - 匹配必須是從線的開始到結束線的

(?: ...)+ - 基團的重複的一個或多個times

(?:keyboard|computer|black)(?: |$) - 以空格或行尾結尾的三個單詞之一

所有組非捕獲?:,因爲你只需要一個完整的短語

演示:https://regex101.com/r/d0dD0w/3

+0

感謝謝爾蓋 - 作品,但現在PostgreSQL是抱怨「正則表達式是太複雜」 – dmcmulle

相關問題