簡體   English   中英

如果后面沒有模式,則正則表達式匹配

[英]regex match if not followed by pattern

我需要匹配字符串,如:

RHS編號X編號X編號

包含在這樣的字符串中:(所有數字都可以有小數部分或沒有)

foo RHS 100x100x10 foo  
foo RHS 100.0x100x10 foo  
foo RHS 100.0x100.0x10.0 foo
foo RHS 100x100.0x100x10 foo  
foo RHS 10.0x100.0x10.0x10.0 foo  

我寫過這個:

RHS \\d+.?\\d?x\\d+.?\\d?x\\d+.?\\d

但是這個正則表達式也匹配以下字符串的第一組數字:foo RHS 100x100x100 x10 foo

我怎樣才能避免這種情況? 如果有四組數字,基本上我不想要任何匹配

提供的示例不正確。 大多數匹配第 4 行,所有匹配第 5 行。他們是對的,您需要字邊界和負前瞻,但他們缺少一個關鍵部分。

正則表達式匹配點前后的單詞邊界。 意思是如果第三個數字有小數,搜索將不會運行到行尾,也不會看到最后的 x,但匹配字符串。

作為解決方案,您需要使用此負前瞻來檢查 x 的小數點后: (?!\\.?\\d?x)

以及將搜索包裝在單詞邊界中: \\b...\\b

我測試了下面的字符串並且它有效。

\bRHS \d+\.?\d?x\d+\.?\d?x\d+\.?\d?(?!\.?\d?x)\b

示例: https : //regex101.com/r/0nzHkN/2/

請改用此正則表達式:

RHS \d+.?\d?x\d+.?\d?x\d+.?\d?(?!x)

或者它的緊湊版本:

RHS (\d+.?\d?){3}(?!x)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM