第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

正則表達(dá)式檢測(cè)用于&while循環(huán)的半冒號(hào)終止C ++

正則表達(dá)式檢測(cè)用于&while循環(huán)的半冒號(hào)終止C ++

正則表達(dá)式檢測(cè)用于&while循環(huán)的半冒號(hào)終止C ++在我的Python應(yīng)用程序中,我需要編寫(xiě)一個(gè)匹配C ++ for或while循環(huán)的正則表達(dá)式,該循環(huán)使用分號(hào)(;)。例如,它應(yīng)匹配此:for (int i = 0; i < 10; i++);......但不是這個(gè):for (int i = 0; i < 10; i++)這看起來(lái)很瑣事,直到您意識(shí)到開(kāi)括號(hào)和右括號(hào)之間的文本可能包含其他括號(hào),例如:for (int i = funcA(); i < funcB(); i++);我正在使用python.re模塊?,F(xiàn)在我的正則表達(dá)式看起來(lái)像這樣(我已經(jīng)留下了我的評(píng)論,所以你可以更容易理解):# 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循環(huán)的第三部分包含一個(gè)函數(shù)就會(huì)中斷,如下所示:for (int i = 0; i < 10; doSomethingTo(i));我認(rèn)為它會(huì)中斷,因?yàn)橹灰陂_(kāi)括號(hào)和右括號(hào)之間放置一些文本,“平衡”組就會(huì)匹配包含文本,因此該(?P=balanced)部分不再起作用,因?yàn)樗黄ヅ洌ㄓ捎谑聦?shí)括號(hào)內(nèi)的文字是不同的)。
查看完整描述

3 回答

?
慕森王

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超3個(gè)贊

您可以編寫(xiě)一個(gè)非常簡(jiǎn)單的例程,而不使用正則表達(dá)式:

  • 設(shè)置一個(gè)位置計(jì)數(shù)器pos,使其指向您for或之后的開(kāi)始括號(hào)之前while。

  • 設(shè)置一個(gè)開(kāi)放的括號(hào)計(jì)數(shù)器openBr來(lái)0。

  • 現(xiàn)在繼續(xù)遞增pos,讀取相應(yīng)位置的字符,并openBr在看到左括號(hào)時(shí)遞增,并在看到右括號(hào)時(shí)遞減。這將在開(kāi)頭增加一次,對(duì)于“ for (”中的第一個(gè)開(kāi)括號(hào),對(duì)于其間的某些括號(hào)增加和減少一些,并0for括號(hào)關(guān)閉時(shí)將其設(shè)置回。

  • 所以,不要當(dāng)openBr0一次。

停止位置是你的結(jié)束for(...)?,F(xiàn)在您可以檢查是否有分號(hào)。


查看完整回答
反對(duì) 回復(fù) 2019-07-30
?
守候你守候我

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超10個(gè)贊

這是你不應(yīng)該用正則表達(dá)式做的事情。只需一次解析字符串一個(gè)字符,跟蹤打開(kāi)/關(guān)閉括號(hào)。

如果您正在尋找這個(gè),那么您絕對(duì)不需要一個(gè)完整的C ++語(yǔ)法詞法分析器/解析器。如果你想練習(xí),你可以編寫(xiě)一個(gè)小的遞歸式解析器,但即便如此,只需匹配括號(hào)。


查看完整回答
反對(duì) 回復(fù) 2019-07-30
?
牧羊人nacy

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超7個(gè)贊

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


查看完整回答
反對(duì) 回復(fù) 2019-07-30
  • 3 回答
  • 0 關(guān)注
  • 718 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)