我想匹配和查找被空格或特殊字符包围的单词索引。例如:
To find: test
this is input test : True
this is#input_ : True
this isinput : False
thisisinputtest: False
this @test is right: True.
Run Code Online (Sandbox Code Playgroud)
我如何匹配它并找到索引。我当前的正则表达式失败:(?i)[^a-zA-Z0-9]test[^a-zA-Z0-9]
我认为你需要在你的情况下使用环视:
(?<!\p{Alnum})test(?!\p{Alnum})
Run Code Online (Sandbox Code Playgroud)
负回顾后(?<!\p{Alnum}) ,如果有存在于左边的字母数字字符会失败的比赛test,负前瞻(?!\p{Alnum}),如果之后有一个字母数字字符将失败的比赛test。
看测试截图:
String str = "this is#test_ :";
Pattern ptrn = Pattern.compile("(?<!\\p{Alnum})test(?!\\p{Alnum})");
Matcher matcher = ptrn.matcher(str);
while (matcher.find()) {
System.out.println(matcher.start());
}
Run Code Online (Sandbox Code Playgroud)
替代方法:匹配并捕获搜索词,并打印第一个捕获组的起始位置:
Pattern ptrn = Pattern.compile("\\P{Alnum}(test)\\P{Alnum}");
...
System.out.println(matcher.start(1));
Run Code Online (Sandbox Code Playgroud)
请参阅此Java 演示
请注意,在这种情况下,这\P{Alnum}是一个消耗模式,在某些边缘情况下,test可能无法匹配。
| 归档时间: |
|
| 查看次数: |
2073 次 |
| 最近记录: |