首先,我的语法不会成为脚本的一部分,但它将通过表单输入进行解析 - 因此任何指向Java代码的“现有”解决方案本身都不适用。
好的,所以这就是我需要做的事情:我需要能够输入一个术语,如:
'这是你的机场,这是你的车。'以这样的方式进入输入字段,只有“机场”或“机场”这个词才能匹配。所以不应该像'99airport'或'airport99'那样匹配。我很亲密!
(?i).*\bair[port|ports].*
如果我在测试网站上输入以上RegEx:
然后,'99airport'确实不匹配,因为开始使用Word边界标识符\b
;但是,我不知道如何将\ b放在单词的结尾处,以便'airport99'也不匹配。我尝试过一些东西,但没有运气。我认为这是围绕[]的语法,需要弄清楚。
并且请不要过分关注需要匹配的内容 - 这些只是随机的单词。目前,如果我的输入有“airport99”,它确实匹配,但如果我能找到解决方案,它就不应该。
谢谢!
答案 0 :(得分:2)
我看到你正在使用mather.matches
检查输入字符串中的单词。这就是为什么在关键字之前和之后需要.*
的原因。由于文本来自输入字段,因此您不需要匹配换行符号,也不需要(?s)
单行/ dotall修饰符。
但是,您将character classes ([...]
)误认为groups ((...)
)。字符类匹配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.*";
答案 1 :(得分:1)
此表达式应符合您的要求:
(?i)\\b(air)?port\\b
匹配" port"和#34;机场"但不匹配" 99port"也不是" port99"也不是" 99机场"不是" airport99"。
如果需要更通用的表达式,则该表达式应匹配以" air"开头的任何单词。加上一些其他(可选)字母,但没有数字或标点符号:
(?i)\\b(air)?[a-z]*\\b