2012-09-17 60 views
1

我想找到一個合適的正則表達式來匹配輸入字符串中的自定義字符對。這些自定義字符被替換爲相應的html標籤。正則表達式忽略自定義轉義字符的模式

例如, 輸入字符串可以成對地用下劃線表示粗體字。因此, _Name_輸出作爲<b>Name</b>

但是如果在字符串中一個真正的底線,不能用「大膽」標籤更換已被忽略。真正的下劃線前面必須有/(我找不到更好的字符,它可能是更多的下劃線或連字符或其他)。 正則下劃線的任何單個或配對發生都必須被正則表達式忽略。

到目前爲止,我能想出這個表達式:

var pattern = @"(?!/)_(.*?)(?!/)_"; 

但下面輸入字符串失敗在:

_Tom_Katy/_Richard/_/_Stephan_and many users

它輸出爲

<b>Tom</b>Katy/<b>Richard/_/</b>Stephan_and many users 

非常感謝在此之前, Pr

+0

你的第一個(?!/)應該是一個倒影,而不是一個lokahead – Gabber

+1

@ Gabber:第二個也應該是一個倒影。 –

+0

不是在整個正則表達式之前尋找lookbehind? – Gabber

回答

1

試試這個

@"(?<!/)_([^/]+?)[^/]_" 

此發現的任何字符序列,而不/裏面,如果你想包括/在搜索中嘗試這種方式

@"(?<!\/)_(.+?)((?<!\/)_)" 

說明:

(?<!/)  # this is a negative lookbehind, it says "I don't want the previous char to be/
_   # finds the first _ 
([^/]+?) # tells to search characters without/(in this case your names) 
[^/]_"  # finds the last _ not preceded by/(maybe redundant seen the previous one) 
+1

'(。*?)'不會發揮作用,直到引用下劃線消耗後,所以這不是問題。但是切換到「(。+?)」可能是一個好主意,否則'__'(連續兩個下劃線)將被轉換爲''。 –

+0

感謝百萬..試了兩種,並完美地工作..我仍然無法得到這個正則表達式背後的邏輯。任何鏈接幫助?字符「<」在這裏做什麼? – PRE

+0

我會編輯我的回答 – Gabber