[英]Java RegEx Syntax with Word Boundaries?
首先,我的语法不会成为脚本的一部分,但它将通过表单输入进行解析 - 因此任何指向Java代码的“现有”解决方案本身都不适用。
好的,所以这就是我需要做的事情:我需要能够输入一个术语,如:
“这是你的机场,这是你的车。” 以这样的方式进入输入字段,只有“机场”或“机场”这个词才能匹配。 所以不应该像'99airport'或'airport99'那样匹配。 我很亲密!
(?i).*\bair[port|ports].*
如果我在测试站点中输入上面的RegEx:
确实,'99airport'不匹配,因为开始使用Word Boundary标识符\\b
; 但是,我不知道如何将\\ b放在单词的结尾处,以便'airport99'也不匹配。 我尝试过一些东西,但没有运气。 我认为这是围绕[]的语法,需要弄清楚。
请不要过分关注需要匹配的内容 - 这些只是随机的单词 。 目前,如果我的输入有'airport99',它确实匹配,但如果我能找到解决方案则不应该。
谢谢!
我看到你正在使用mather.matches
来检查输入字符串中的单词。 这就是为什么你需要关键字之前和之后的.*
。 由于文本来自输入字段,因此您不需要匹配换行符号,也不需要(?s)
单行/ dotall修饰符。
但是,您将字符类( [...]
)与组( (...)
)混淆了 。 字符类匹配1个字符。 例如, [port|ports]
匹配1个字符, p
, o
, r
, t
, |
或者s
。 组可用于匹配特定的符号序列 。 例如(port|ports)
将匹配port
或ports
。
因此,在您的情况下,您可以使用
(?i).*\bairports?\b.*
或 - 效果较差 -
(?i).*\bair(port|ports)\b.*
在Java中, String patrn = "(?i).*\\\\bairports?\\\\b.*";
此表达式应符合您的要求:
(?i)\\b(air)?port\\b
它匹配“港口”和“机场”,但不匹配“99port”,也不匹配“port99”,也不匹配“99机场”,也不匹配“airport99”。
如果需要更通用的表达式,则此表达式应匹配以“air”加上一些其他(可选)字母开头但没有数字或标点符号的任何单词:
(?i)\\b(air)?[a-z]*\\b
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.