我試圖在沒有or運算符的情況下重寫這段代碼。重寫Perl正則表達式
if((/^\s*field\s+{\s*$/)||(/^\s*field\s+{\s*\/\/.*$/)
{
# Do something
}
我試圖在沒有or運算符的情況下重寫這段代碼。重寫Perl正則表達式
if((/^\s*field\s+{\s*$/)||(/^\s*field\s+{\s*\/\/.*$/)
{
# Do something
}
如果你想重寫
(/^\s*field\s+{\s*$/) || (/^\s*field\s+{\s*\/\/.*$/)
我可以建議:
m#^\s*field\s+{\s*($|//)#
最後一部分($|//)
會尋找任何兩個有效行結尾的:行剛剛結束,或兩個斜線。請注意,斜線後面可以跟任何字符,就像你寫了//.*$
一樣。
您的規則不是很嚴格規定,但你可以捕捉到一個簡單的那些行:
^text[1-3]
這將讓所有的行開始與那些textN
話,其中N
是一組{1,2,3}
之一。這似乎是最有可能的基礎上,實際上它是用正則表達式|
功能實現還有:
^(text1|text2|text3)
然而,如前所述,規格並不是那麼詳細,所以我們真的不知道你想要什麼捕捉。您應該指定您需要捕獲的準確的規則,而不僅僅是可能被誤解的示例。
好了,你的意見之一後,它開始變得有意義:
我解析一個類似於C++的文件,我希望我的解析器同時匹配評論和註釋的行(單行註釋)。
因此,您正在尋找有效的行結束行註釋//
或行根本沒有評論。
評論中的關鍵詞是「parse」。嚴重的是,不要試圖用正則表達式來做到這一點,除非你知道代碼會非常簡單。如果你想解析,你需要一個解析器。乾淨利落。事實上,即使對於簡單的代碼,我建議你應該使用解析器。
例子:你會用下列完全有效行做:
int ratio = height
/
width;
char *description = "This program will look for '//' markers";
int myvar = text1/comment;
假設你的C++ - 語言一樣會非常簡單的(例如,比其他任何//
字符在一行的結尾處註釋),您可以在早期階段將每條線的末尾剝去//.$
,以便在稍後的過程中不會看到註釋。
然而,這是對你的語法/語法相當嚴格的限制,除非你能強加,詞法分析器/分析器是最好的方式。
爲什麼限制?(這是否是作業?) –
您尚未在此提供足夠的信息。你想匹配什麼標準? '/./'的正則表達式可以匹配所有那些沒有'|'的行。運營商。 – Flimzy
不是作業:)我正在寫解析器,我想匹配註釋行。 -2爲此?! – Jean