我正在使用以下正則表達式模式來匹配用C#樣式編寫的if語句;正則表達式模式匹配if語句在C#中?
\b[if]{2}\b[ ]?\({1}(?<HeaderSection>[ \w\s\a\t\=\.\@\#\$\%\&a-zA-Z0-9\(\)\;\/\"\'\[\]\*]*)\){1}(?<CommentSection>[\s\a\w\t a-zA-Z0-9\/\.]*)[\r\n]*\{{1}(?<FunctionBody>[\r\n \a\s\wa-zA-Z0-9\(\)\"\.\;\:]*)[\r\n]*\}{1}
它是一個瘋狂的長正則表達式模式,但似乎工作的一些extent.Let我解釋一下,它有三個命名捕獲組即HeaderSection,CommentSection和函數體 .HeaderSection捕捉之間的匹配開始和結束if語句的括號,例如來自以下聲明;
if(Value1==Function(int Z))
它捕獲;
Value1==Function(int Z)
同樣CommentSection捕獲關閉括號後的評論(如果有),所以從下面的語句;
if(Value1==Function(int Z))//This is a Comment.
它捕獲
//This is a Comment.
和函數體捕獲任何之間{和},如在下面的代碼;
if(Value1==Function(int Z))//This is a Comment.
{
This is the
space for
function body.
}
它捕獲「這是功能體的空間。」 所以這就是正則表達式匹配的解釋。現在的問題是,如果我有這樣的功能;
if(Value1==Function(int Z)//This is a Comment.
{
if(Value2==Value1)
{
Some code
}
}
如果我使用上面的正則表達式匹配它,它不匹配第一個if聲明即;
if(Value1==Function(int Z)//This is a Comment.
{
Another function();
}
,而是相匹配的內部一個即
if(Value2==Value1)
{
Some code
}
請點我做錯了,或是否有另一種方式,是不太凌亂,請讓我知道,或糾正,如果正則表達式模式它的錯誤somewhere.One事情我在C#中使用正則表達式函數做這一切。 在此先感謝。
我沒有足夠的手指在什麼錯在這裏點。你爲什麼想用正則表達式來做這件事?在所有? –
不,我不想使用正則表達式,但我找不到其他的方式,所以我不得不使用它們。 – PurpleXenon
古老的日子http://dinosaur.compilertools.net/ – I4V