繁体   English   中英

带有Word边界的Java RegEx语法?

[英]Java RegEx Syntax with Word Boundaries?

首先,我的语法不会成为脚本的一部分,但它将通过表单输入进行解析 - 因此任何指向Java代码的“现有”解决方案本身都不适用。

好的,所以这就是我需要做的事情:我需要能够输入一个术语,如:

“这是你的机场,这是你的车。” 以这样的方式进入输入字段,只有“机场”或“机场”这个词才能匹配。 所以不应该像'99airport'或'airport99'那样匹配。 我很亲密!

(?i).*\bair[port|ports].*

如果我在测试站点中输入上面的RegEx:

http://www.ocpsoft.org/tutorials/regular-expressions/java-visual-regex-tester/#!;t=123-45-6789%0A9876-5-4321%0A987-65-4321%20(attack )%0A987-65-4321%20%0A192-83-7465&R =(%3FM)%5E(%5CD%7B3%7D-%3F%5CD%7B2%7D-%3F%5CD%7B4%7D)%24&X =实测值%20good%20SSN%3A%20%241

确实,'99airport'不匹配,因为开始使用Word Boundary标识符\\b ; 但是,我不知道如何将\\ b放在单词的结尾处,以便'airport99'也不匹配。 我尝试过一些东西,但没有运气。 我认为这是围绕[]的语法,需要弄清楚。

请不要过分关注需要匹配的内容 - 这些只是随机的单词 目前,如果我的输入有'airport99',它确实匹配,但如果我能找到解决方案则不应该。

谢谢!

我看到你正在使用mather.matches来检查输入字符串中的单词。 这就是为什么你需要关键字之前和之后的.* 由于文本来自输入字段,因此您不需要匹配换行符号,也不需要(?s)单行/ dotall修饰符。

但是,您将字符类( [...]组( (...) )混淆了 字符类匹配1个字符。 例如, [port|ports]匹配1个字符, port| 或者s 组可用于匹配特定的符号序列 例如(port|ports)将匹配portports

因此,在您的情况下,您可以使用

(?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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM