我有這樣如何提取的正則表達式評論
(?<!(\w/))$#Cannot end with a word and slash
我想提取結束註釋一個正則表達式。雖然這個例子並沒有反映出這種情況,但是可能會有一個正則表達式,其中包含哈希上的正則表達式。
\##value must be a hash
什麼將正則表達式是提取評論確保其對正則表達式其中可能包含#的不在註釋中使用時是安全的。
我有這樣如何提取的正則表達式評論
(?<!(\w/))$#Cannot end with a word and slash
我想提取結束註釋一個正則表達式。雖然這個例子並沒有反映出這種情況,但是可能會有一個正則表達式,其中包含哈希上的正則表達式。
\##value must be a hash
什麼將正則表達式是提取評論確保其對正則表達式其中可能包含#的不在註釋中使用時是安全的。
這裏有一個淨味正則表達式解析部分淨味模式,這應該得到相當接近:
\A
(?>
\\. # Capture an escaped character
| # OR
\[\^? # a character class
(?:\\.|[^\]])* # which may also contain escaped characters
\]
| # OR
\(\?(?# inline comment!)\#
(?<Comment>[^)]*)
\)
| # OR
\#(?<Comment>.*$) # a common comment!
| # OR
[^\[\\#] # capture any regular character - not # or [
)*
\z
幸運的是,在.net中每個捕獲組記得它的所有捕獲的,而不僅僅是最後,所以我們可以在單個解析中找到所有Comment
組的捕獲。正則表達式幾乎可以解析正則表達式 - 但幾乎沒有完全解析,它只是解析足以找到評論。
這裏是你如何使用結果:
Match parsed = Regex.Match(pattern, pattern,
RegexOptions.IgnorePatternWhitespace |
RegexOptions.Multiline);
if (parsed.Success)
{
foreach (Capture capture in parsed.Groups["Comment"].Captures)
{
Console.WriteLine(capture.Value);
}
}
工作例如:謹慎http://ideone.com/YP3yt
最後說一句 - 這正則表達式假設整個模式是IgnorePatternWhitespace
模式。當它沒有被設置時,所有的#
都被直接匹配。請記住,該標誌可能會以單一模式多次更改。例如,在(?-x)#(?x)#comment
中,不管IgnorePatternWhitespace
,第一個#
是字面匹配的,(?x)
將IgnorePatternWhitespace
標誌重新打開,而第二個#
被忽略。
如果您想要一個強大的解決方案,您可以使用正則表達式語言解析器。
你或許可以適應的.Net源代碼和提取解析器:
像這樣的東西應該可以工作(如果你在正則表達式的每一行分別運行它)。評論本身(如果存在)將在第三個捕獲組中。
/^((\\.)|[^\\\#])*\#(.*)/
(\\.)
相匹配的轉義字符,[^\#]
匹配與他們的評論之前,整條生產線匹配*
量詞任何非削減非哈希字符一起。然後,正則表達式的其餘部分檢測評論標記並提取文本。
我沒有得到任何匹配。嘗試通過RegexBuddy程序。感謝解釋和幫助到目前爲止。 –
一個在正則表達式解析忽視的選項是RightToLeft
模式。
從最後提取評論。
人們可以簡單,如果我們的工作我們從線到開頭的年底方式的格局。如
^
.+? # Workable regex
(?<Comment> # Comment group
(?<!\\) # Not a comment if escaped.
\# # Anchor for actual comment
[^#]+ # The actual commented text to stop at #
)? # We may not have a comment
$
使用C#中的上面的圖案與這些選項RegexOptions.RightToLeft | RegexOptions.IgnorePatternWhitespace | RegexOptions.Multiline
有可能是一個正則表達式與包括於哈希正則表達式
此行(?<!\\) # Not a comment if escaped.
說,如果處理該情況有一個程序\
,我們沒有評論。
哈希值也可以是字符類:'[#]'。這裏有一個有趣的正則表達式供你解析:'a [#[b \ [\]] \#] \\#'(matches ab#] \) – Kobi
@Kobi:哈哈,你在旋轉我。我是一個白帶正規男人。 –
這是我從我以前的評論(它通過)的詭計正則表達式的正則表達式:http://ideone.com/4w5Q0 – Kobi