2012-11-14 248 views
1

鑑於以下正則表達式:正則表達式匹配的雙連字符的字符串

^((?:\d+\s)?\w+(?:\s\w+)?) 

其工作良好,以提取所述第一(最多)2個字(帶有數字前綴,如果存在的話),我怎樣才能適應它包括連字符的單詞?

我試着在第一個w+之後加入\-,但是隻找到了連字符的前半部分並且破壞了原始功能。

有效匹配的一些例子:

  • 1兩
  • 3四五
  • 六七八
  • 九歲十

他們是一個地址的組成部分因此,我想,也可能在某個地方有一個撇號,我怎麼也檢查這個?

+0

多的話,我不認爲你需要逃脫'-'的'[]'之外。 – 2012-11-14 14:38:58

+0

Try \ - *因爲如果你忽略了這個量詞,你只能匹配帶連字符的單詞 –

回答

2

使用[\s\-],而不是\s

[\s\-]要麼匹配space- ..

所以應該

^((?:\d+[\s\-])?\w+(?:[\s\-]\w+)?) 

上述正則表達式不會爲您的有效matches..you工作應該使用下面給出的正則表達式


一種更好的方式,以匹配-或空間分隔的將是

^\w+([\s\-]\w+){0,2}$ 
+0

感謝您對使用方括號的解釋和澄清。第一個例子幾乎是我在尋找的東西,除了它使用我的示例匹配時,它只能達到Six-Seven。你最後一個例子的問題是,它會匹配超過3個單詞。我需要將比賽壓縮到所提供的例子。請原諒我缺乏正則表達式的理解,但是您能否詳細說明如何匹配我提供的示例,而不是更多? – MrG

+0

@MrG你可以使用'{0,2}'檢查最後一個正則表達式中的編輯 – Anirudha