1樓:李昂
沒有輸出顯然是因為字串中沒有匹配你pattern的,你的pattern是指1到9其中乙個數字出現一次,然後後面跟著零或多個的數字,然後後面再緊接著出現乙個或多個0。
另外,你如果是是想1-9的數字出現零次或多次就得寫[0-9]*,而不是[0-9]\\d*。
中文居然能把正規表示式表達得這麼清楚,感覺可以用中文作為正則的需要實現了
2樓:毛鳴
你的regex是([1-9]\d*)(0+),代表「先匹配乙個非0數字,再匹配任意多個(可為0個)數字,最後匹配至少1個0」。
你的輸入字串是「ab00cd+123fght456-25 3.005fgh」,根本沒有符合以上匹配的子字串。
從「最後匹配至少1個0」,看可能的匹配:
第乙個0前面是b,不匹配\d;
第二個0前面是0,能匹配\d,但再前面是b,不匹配\d或[1-9];若\d*不匹配任何數字,前面的0也不能匹配[1-9];
第三個0跟第乙個0類似;
第四個0跟第二個0類似,於是全滅。
你可以試試把輸入字串改成「10」,就能匹配了。
這與貪婪 / 非貪婪無關,在沒有原子分組之類的情況下,貪婪不影響匹配與否,因為匹配失敗時會回溯,最終引擎還是會歷遍所有可能的匹配方式。
貪婪與非貪婪只是改變了歷遍的順序,在有多種可能的匹配方式的情況下,改變先被歷遍到的匹配方式的順序,於是改變了最終匹配的子字串和分組。
若是想看字尾0的數量,最簡單的方法,是拿被匹配的子字串再用另乙個regex(0*$)匹配一遍,看匹配長度。
這樣也比較清晰,畢竟regex因容易變成write-only。
3樓:
\d*?(0+)
*?非貪婪匹配
比如 123800
用\d*(0+) 匹配的是 12380(0)用\d*?(0+) 匹配的是 1238(00)
awk 可以捕獲並引用正規表示式的分組嗎?
跡憶客 這個問題我可以來回答一下。對於正規表示式來說,其實它是不存在大小的比較的。它的其實只有匹配和不匹配兩個概念,也就是說只有等於和不等於。下面我們回到題主的這個問題,對於題主給的兩條資料,這裡我隨便加兩條資料 資料多的話,更能體現出普遍性 比如給定下面的資料 2017 02 22 18 19 1...
關於cool語言和正規表示式的問題?
non escaped newline character的意思就是非轉義的換行符。對於詞法分析器來說,乙個新行的開始不是我們平常感覺的一行的開頭,而是上一行的終結符號 看不到的 n或者 n r 上面的意思是說,字串不能跨行,如果想跨行寫字串,必須使用 來指明說要換行了。轉義字元 你看到的字元不是你...
正規表示式是圖靈完備的嗎?
理論上說,正規表示式就是符合Chomsky層級中type3文法的字串,那麼肯定是不完備的,至少連 1 n 2 n 這樣的字串都無法描述。但是實際的正規表示式引擎實現中,有時為了增強匹配字串的能力,會讓該引擎的語法達到type2乃至type0。比如Perl6的正規表示式可以完全匹配CFG type2 ...