2017-10-05 132 views
0

我想寫一個匹配{^xyz^}爲波紋管的模式,正則表達式與{^和^}

@"\b\{\^\S*\^\}\b 

但我沒有得到成功,想知道什麼是我的模式問題。

+0

因爲我想獲取{^和^}之間的字符串....例如,如果字符串是{^ fristname ^} ...我想獲得'firstname'。 – dula

+0

您使用哪些工具進行匹配(原因是您需要轉義'\\')?有你的報價面前! – kaza

+0

對不起,我想突出顯示名字,這就是爲什麼我在我的回覆中放置單引號的原因 – dula

回答

1

您可以使用:

@"\{\^([^}]*)\^\}" 

,並提取捕獲組#1的字符串。

  • 使用捕獲的組獲取想要從較大匹配中提取的子字符串。
  • 由於{}是非單詞字符,因此字邊界或\b將無法​​在此處工作。
  • 否定字符類別[^}]*的使用比貪婪\S*更有效和準確。
+0

不確定它是否是可能的字符串,但是你的正則表達式不匹配^ {}內的{^ curly {brace}。 – Andrew

+0

請參閱我們總是可以發明一個輸入,這會導致給定正則表達式的問題,但關鍵在於它是否爲每個OP或現在的有效輸入。 – anubhava

+0

問題是你認爲不會在該字符串中關閉大括號,我不知道爲什麼。 ;) – Andrew

0

我只是簡單地使用\{\^(\S*?)\^\}。這樣您就可以捕獲插入符號和花括號之間的內容。 ?是爲了使*量詞延遲,因此它儘可能少地匹配字符(爲了防止將一個塊的開始匹配到同一行中另一個塊的結尾)。

與那些\b你需要在正則表達式的大括號之前和之後匹配一個字型字符。這真的是一個要求嗎?或者可以有空間嗎?