我需要匹配字符串
RHS numberXnumberXnumber
在这些字符串中:(所有数字都可以包含小数部分)
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 100x100x100x10 foo
我该怎样才能避免这种情况?如果有4个号码,基本上我不想要任何匹配
提供的示例不正确。大多数匹配第4行,所有匹配第5行。他们是正确的,你需要字边界和负向前瞻,但他们缺少一个关键的部分。
正则表达式匹配点之前和之后的字边界。意思是如果第三个数字有一个小数,搜索将不会运行到行的末尾,将不会看到最终的x,但将匹配该字符串。
作为一种解决方案,您需要使用这个负向前瞻,检查x:(?!\.?\d?x)
的小数点后面
以及在单词边界中包装搜索:\b...\b
我测试了下面的字符串,它的工作原理。
\bRHS \d+\.?\d?x\d+\.?\d?x\d+\.?\d?(?!\.?\d?x)\b
请改用此正则表达式:
RHS \d+.?\d?x\d+.?\d?x\d+.?\d?(?!x)
或者它的紧凑版本:
RHS (\d+.?\d?){3}(?!x)