2013-05-07 71 views
-1

我需要一個正則表達式匹配以下之間的所有的話:正則表達式,找到兩個分隔符

字符串:「你好#world是#party時間#」
匹配:「世界」,和「派對時間」

雖然玩正則表達式我只能匹配一個或其他,但從來都沒有。這甚至有可能嗎?

+2

什麼編程語言? '世界'沒有被分隔符包圍...... – 2013-05-07 23:18:52

+0

你的一些嘗試是什麼?另外,你的意思是你的字符串中有##世界#嗎? – ajp15243 2013-05-07 23:19:10

+0

我正在使用的語言是PHP。因爲我們不使用內容可編輯的div,所以我們使用額外的#作爲權衡標籤與空格的解決方案。匹配第一個很容易,這是我有一個空間的, http://regex101.com/r/jQ6cN6 – 2013-05-07 23:22:07

回答

1

有沒有解決方案,用你現在設置它的方式。使用#作爲「停止間隙」與想要匹配非間隔詞和間隔詞是不明確的。問題在於空間..它是一個有效的字符和非有效的字符,取決於數值,並且沒有其他方法可以判斷哪個字符是哪個字符。

你不能把它分解成多個正則表達式。如果你第一次嘗試像#([^#]+)那樣做,它將匹配#world#party。如果您嘗試先做#([^#]+)#它將匹配world it is。即使你把一個負回顧後進入混合#((?:(?<!\b).)+)#你會匹配world it is #party time

爲了解決這一點,你必須這樣做要麼

  1. 把#結束分隔符(「停止鴻溝」,你怎麼稱呼它)在的末尾全部是短語,即使是單個單詞。然後你可以做#([^#]+)#
  2. 將短語中的空格改爲別的東西(比如 下劃線)。那麼你可以做#([^\b]+)(這可能會有所不同,這取決於你將交換空間)