亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

正則表達式檢測用于&while循環的半冒號終止C ++

正則表達式檢測用于&while循環的半冒號終止C ++

正則表達式檢測用于&while循環的半冒號終止C ++在我的Python應用程序中,我需要編寫一個匹配C ++ for或while循環的正則表達式,該循環使用分號(;)。例如,它應匹配此:for (int i = 0; i < 10; i++);......但不是這個:for (int i = 0; i < 10; i++)這看起來很瑣事,直到您意識到開括號和右括號之間的文本可能包含其他括號,例如:for (int i = funcA(); i < funcB(); i++);我正在使用python.re模塊?,F在我的正則表達式看起來像這樣(我已經留下了我的評論,所以你可以更容易理解):# match any line that begins with a "for" or "while" statement:^\s*(for|while)\s*\(  # match the initial opening parenthesis     # Now make a named group 'balanced' which matches a balanced substring.     (?P<balanced>         # A balanced substring is either something that is not a parenthesis:         [^()]         | # …or a parenthesised string:         \( # A parenthesised string begins with an opening parenthesis             (?P=balanced)* # …followed by a sequence of balanced substrings         \) # …and ends with a closing parenthesis     )*  # Look for a sequence of balanced substrings\)  # Finally, the outer closing parenthesis.# must end with a semi-colon to match:\s*;\s*這適用于所有上述情況,但只要你嘗試使for循環的第三部分包含一個函數就會中斷,如下所示:for (int i = 0; i < 10; doSomethingTo(i));我認為它會中斷,因為只要在開括號和右括號之間放置一些文本,“平衡”組就會匹配包含文本,因此該(?P=balanced)部分不再起作用,因為它不匹配(由于事實括號內的文字是不同的)。
查看完整描述

3 回答

?
慕森王

TA貢獻1777條經驗 獲得超3個贊

您可以編寫一個非常簡單的例程,而不使用正則表達式:

  • 設置一個位置計數器pos,使其指向您for或之后的開始括號之前while。

  • 設置一個開放的括號計數器openBr0

  • 現在繼續遞增pos,讀取相應位置的字符,并openBr在看到左括號時遞增,并在看到右括號時遞減。這將在開頭增加一次,對于“ for (”中的第一個開括號,對于其間的某些括號增加和減少一些,并0for括號關閉時將其設置回。

  • 所以,不要當openBr0一次。

停止位置是你的結束for(...)?,F在您可以檢查是否有分號。


查看完整回答
反對 回復 2019-07-30
?
守候你守候我

TA貢獻1802條經驗 獲得超10個贊

這是你不應該用正則表達式做的事情。只需一次解析字符串一個字符,跟蹤打開/關閉括號。

如果您正在尋找這個,那么您絕對不需要一個完整的C ++語法詞法分析器/解析器。如果你想練習,你可以編寫一個小的遞歸式解析器,但即便如此,只需匹配括號。


查看完整回答
反對 回復 2019-07-30
?
牧羊人nacy

TA貢獻1862條經驗 獲得超7個贊

這是使用錯誤工具完成工作的一個很好的例子。正則表達式不能很好地處理任意嵌套的子匹配。你應該做的是使用一個真正的詞法分析器和解析器(C ++的語法應該很容易找到)并尋找意外的空循環體。


查看完整回答
反對 回復 2019-07-30
  • 3 回答
  • 0 關注
  • 723 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號