Java 带词边界的 RegEx 语法?
Java RegEx Syntax with Word Boundaries?
首先,我的语法不会成为脚本的一部分,但会通过表单输入进行解析——因此任何指向 Java 代码的 'existing' 解决方案本身将不适用.
好的,这就是我需要做的:我需要能够输入如下术语:
'This is your airport and this is your car.' 以仅匹配单词 'airport' 或 'airports' 的方式进入输入字段。因此,不应匹配“99airport”或 'airport99' 之类的内容。我很接近!
(?i).*\bair[port|ports].*
如果我在测试站点中将以上内容作为 RegEx 输入:
那么,事实上,'99airport' 不匹配,因为开始使用词边界标识符 \b
;但是,我不知道如何将 \b 放在单词的结尾,这样 'airport99' 也不匹配。我尝试了几件事,但没有运气。我认为需要弄清楚 [] 周围的语法。
并且请不要太在意什么需要匹配或不需要——这些只是随机词。目前,如果我的输入有 'airport99',它确实会匹配,但如果我能找到解决方案,它应该不会匹配。
谢谢!
这个表达式应该符合您的要求:
(?i)\b(air)?port\b
它匹配 "port" 和 "airport" 但不匹配“99port”、"port99" 和“99airport”,也不匹配 "airport99"。
如果需要更通用的表达式,这个表达式应该匹配任何以 "air" 开头的单词加上一些其他(可选)字母,但没有数字或标点符号:
(?i)\b(air)?[a-z]*\b
我看到您正在使用 mather.matches
检查输入字符串中的单词。这就是为什么您需要在关键字前后加上 .*
。由于文本来自输入字段,因此不需要匹配换行符,也不需要 (?s)
singleline/dotall 修饰符。
然而,你错了character classes ([...]
) with 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.*";
首先,我的语法不会成为脚本的一部分,但会通过表单输入进行解析——因此任何指向 Java 代码的 'existing' 解决方案本身将不适用.
好的,这就是我需要做的:我需要能够输入如下术语:
'This is your airport and this is your car.' 以仅匹配单词 'airport' 或 'airports' 的方式进入输入字段。因此,不应匹配“99airport”或 'airport99' 之类的内容。我很接近!
(?i).*\bair[port|ports].*
如果我在测试站点中将以上内容作为 RegEx 输入:
那么,事实上,'99airport' 不匹配,因为开始使用词边界标识符 \b
;但是,我不知道如何将 \b 放在单词的结尾,这样 'airport99' 也不匹配。我尝试了几件事,但没有运气。我认为需要弄清楚 [] 周围的语法。
并且请不要太在意什么需要匹配或不需要——这些只是随机词。目前,如果我的输入有 'airport99',它确实会匹配,但如果我能找到解决方案,它应该不会匹配。
谢谢!
这个表达式应该符合您的要求:
(?i)\b(air)?port\b
它匹配 "port" 和 "airport" 但不匹配“99port”、"port99" 和“99airport”,也不匹配 "airport99"。
如果需要更通用的表达式,这个表达式应该匹配任何以 "air" 开头的单词加上一些其他(可选)字母,但没有数字或标点符号:
(?i)\b(air)?[a-z]*\b
我看到您正在使用 mather.matches
检查输入字符串中的单词。这就是为什么您需要在关键字前后加上 .*
。由于文本来自输入字段,因此不需要匹配换行符,也不需要 (?s)
singleline/dotall 修饰符。
然而,你错了character classes ([...]
) with 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.*";