2014-01-12 14 views
1

我想寫一個正則表達式來檢查字符串的單詞後跟一個?,:,!,但我嘗試了這麼多的東西,似乎沒有任何工作正常.. 最好的我想出了:\\b([a-zA-Z]*)([\:]|[\?])\正則表達式來搜索一個單詞,然後是任何特定集合的任何符號

測試短語?是這樣的:就像這樣!測試是否一切?作品。

我寫上面到下面的結果來的從例句功能:

array(
[0] => phrase, 
[1] => array(
      [0] => something, 
      [1] => like this, 
[2] => everything 
) 
+0

因爲這是你在這裏第五個問題問,我就開始接受答案(複選標記答案的左正下方票)儘可能多的用戶不會幫助你當他們看到你不接受你問題的答案時。但請記住:永遠接受最能幫助你的答案!如果沒有答案能解決您的問題,那麼不接受答案是完全有效的! –

回答

2

你可能反而試試這個:

\b\w+\b(?=[!:?]) 

這將產生以下結果爲測試句子:

'phrase', 'something', 'this', 'everything' 

您有一個初始字邊界(\b ),但在查找!:?之前,您沒有完成該單詞。這些標點符號在給定的單詞內不匹配。

此外,[!:?]默認情況下僅匹配這三個標點符號中的任何一個,因此您不需要或(|)。

如果你正在尋找這三個標點符號之前每滿語/句子匹配,你可以嘗試正則表達式是這樣的:

\w[\w\s]+?(?=[!:?]) 

這將使你:

'The test phrase', 'is something', 'like this', 'to test whether everything' 
+0

好吧,你已經非常幫助我了! 雖然我還有一個問題: 是否有可能創建一個正則表達式,它結合了您給出的兩個結果。我的意思是,一個正則表達式只返回單個單詞,如果單詞有一個?在它後面,並且當有':'的單詞時,會返回幾個單詞?當有一個':'的單詞時,我想把這個單詞和每一個下一個單詞帶到下一個! 我可以用2個正則表達式和一些動作寫一個函數,但我想知道這是否可以在一個正則表達式中完成。 – user3156386

+0

@ user3156386所以,你的意思是你只是想要(1)在問號前面的每個單詞和(2)在冒號和感嘆號之間的每個短語/句子? –

0

我'去爲

(\w+)[?!:] 

如果你只是想確保一個單詞後跟一個的?!:。不需要向前看,檢查字邊界或其他東西(總是記住:保持簡單和愚蠢!)。


關於對 @275365s answer您的評論:

僅僅返回若言有一個單詞一個正則表達式?在它後面,並且當有':'的單詞時,會返回幾個單詞?當有一個':'的單詞時,我想把這個單詞和每一個下一個單詞帶到下一個!

這是完全可能的:

(\w+)\?|(\w+):\s?(.+?)! 

Regular expression visualization

Debuggex Demo
Demo @ regex101

還是那句話:保持簡單和愚蠢的,但要注意這將失敗如果有嵌套0​​裏面一個:abc! block!
例如句子i: will? fail!不會給你單will,它會給你iwill? fail

說明:

(\w+)\? #every word which is followed by a ? 
|   #OR 
    (\w+) #every word 
    :   #which is followed by a : 
    \s?  #and an optional whitespace 
    (.+?)  #every character 
    !   #until a ! is encountered 
相關問題