2016-02-12 47 views
0

我需要一個正則表達式來處理來自搜索字段的關鍵字。這個想法是讓它的行爲非常像谷歌(即:支持雙引號文本,允許與空間條款)。此外,我有我的數據集中的標籤,我希望能夠使用顏色進行引用。需要正則表達式來提取由空格和鍵/值對分隔的用冒號分隔的術語?

樣本輸入將是:

1/2 one two "three & four" five:six seven:"eight nine ten" 

這應該輸出:

1/2 
one 
two 
three & four 
five:six 
seven:eight nine ten 

這也將正常工作有「十二五」和「七」相同的捕獲組作爲其他的關鍵詞,只要有另一個捕獲組與'六'和'八九十'相關聯。

+3

燦你分享你的'有沒有試過? –

+0

研究'lookahead regex' – Jeff

+0

@JayBlanchard我最近來的是'([^ \ s「':] +)|(」[^「] *」|'[^'] *')' – marlboro

回答

0

正則表達式:

((\"[\s\S]+?\")|[\s\S]+?(:(?2))?)\K(\s+|$) 

換人:

\r\n 

說明:

獲取一切可能的一切在兩者之間引號(開始用空格或:),然後重新設置正則表達式匹配,然後匹配任何空格或字符串的結尾。這意味着它只匹配空格或字符串的結尾,然後用換行符替換它。

用途:

$re = "/((\\\"[\\s\\S]+?\\\")|[\\s\\S]+?(:(?2))?)\\K(\\s+|$)/"; 
$str = "1/2 one two \"three & four\" five:six seven:\"eight nine ten\""; 
$subst = "\r\n"; 

$result = preg_replace($re, $subst, $str); 

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

編輯1:改進爲不正確匹配一切正常
編輯2:縮短

相關問題