我有這個字串
*** Sampled system activity (Sun Oct 31 10:57:41 2021 0100) (1007.04ms elapsed) ***\n
我需要提取 10:57:41
我試試
^([0-1]?\d|2[0-3])(?::([0-5]?\d))?(?::([0-5]?\d))?$
或者
^(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$
但它不起作用
uj5u.com熱心網友回復:
保持簡單,我建議只使用:
\b\d{1,2}:\d{2}:\d{2}\b
這是不可能的,在你輸入文字的任何其它大于時間部分將匹配這一點。這是一個演示模式作業的演示。
uj5u.com熱心網友回復:
由于錨點^和$斷言字串的開頭和結尾,您的模式不匹配。
如果您洗掉錨點,您([0-1]?\d|2[0-3])(?::([0-5]?\d))?(?::([0-5]?\d))?將獲得部分匹配,因為最后 2 組是可選的。
如果?從組中洗掉,則會留下多余的非捕獲組,它們也可以省略。現在你有([0-1]?\d|2[0-3]):([0-5]?\d):([0-5]?\d)
對于僅匹配,您可以省略捕獲組,并在非捕獲組中打開第一個捕獲組。為了防止部分匹配,您可以添加單詞邊界\b
簡化模式:
\b(?:[01]?\d|2[0-3]):[0-5]?\d:[0-5]?\d\b
正則運算式演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/342410.html
標籤:正则表达式
