gpt4 book ai didi

java - 检查字符串中是否存在模式

转载 作者:行者123 更新时间:2023-12-01 12:27:05 29 4
gpt4 key购买 nike

我尝试搜索,但找不到任何对我有意义的东西!我是正则表达式的菜鸟 :)

尝试查看另一个字符串中是否存在特定单词“some_text”。

String s = "This is a test() function"
String s2 = "This is a test () function"

假设有上述两个字符串,我可以在 RegEx Tool 使用以下模式进行搜索
[^\w]test[ ]*[(]

但无法在 Java 中使用正匹配
System.out.println(s.matches("[^\\w]test[ ]*[(]");

我曾尝试使用双\甚至四个\\作为转义字符,但没有任何效果。

要求是看到单词以空格开头或者是一行的第一个单词并且在该特定单词之后有一个左括号“(”,这样所有这些“test()、test()或test()”应该得到一场积极的比赛。

使用 Java 1.8

干杯,
费萨尔。

最佳答案

您缺少的一点是 Java matches() 为您在 Regex 的开头和末尾放置了一个 ^ $ 。所以你的表达实际上被视为:

^[^\w]test[ ]*[(]$

这永远不会与您的输入相匹配。

从您的需求描述来看,我建议将您的正则表达式改写成这样(假设“特定词”是指 test ):
(?:.*)(?<=\s)(test(?:\s+)?\()(?:.*)

See the regex at work here.

解释:
^                 Start of line - added by matches()
(?:.*) Non-capturing group - match anything before the word, but dont capture into a group
(?<=\s) Positive lookbehind - match if word preceded by space, but dont match the space
( Capturing group $1
test(?:\s+)? Match word test and any following spaces, if they exist
\( Match opening bracket
)
(?:.*) Non-capturing group - match rest of string, but dont capture in group
$ End of line - added by matches()

代码示例:
public class Main {
public static void main(String[] args) {
String s = "This is a test() function";
String s2 = "This is a test () function";
System.out.println(s.matches("(?:.*)((?<=\\s))(test(?:\\s+)?\\()(?:.*)"));
//true
}
}

关于java - 检查字符串中是否存在模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60464842/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com