gpt4 book ai didi

java - 正则表达式匹配器总是返回 false

转载 作者:行者123 更新时间:2023-12-02 01:39:06 25 4
gpt4 key购买 nike

我正在尝试解析这样的字符串;

/^/^this is a big|/*this is a bold text|/-this is strike through| i need the text between $/^ and $|

regexr 处测试了正则表达式和 java regex tester它们都显示了它的工作原理。

还引用: Java regex matcher always returns falseRegex that always returns false

将我的代码与 Java Regex tutorial on Jenkov 进行比较而且看起来很相似

我的代码

 public static final String bold = "/\\/\\*(.*?)\\|/g";
public static final String strike = "/\\/\\-(.*?)\\|/g";
public static final String big = "/\\/\\^(.*?)\\|/g";


String input = "/^/^this is a big|/*this is a bold text|/-this is strike through|";

SpannableStringBuilder str = new SpannableStringBuilder(input.trim());
Pattern pattern = big;
Matcher matcher = pattern.matcher(str.toString());

while (matcher.find()) {
str.setSpan(new RelativeSizeSpan((1.25f)),
matcher.start(), matcher.end(),
SPAN_INCLUSIVE_INCLUSIVE);
//input.replace(matcher.group(1),"");
}

所以 matcher.find() 返回 false,并且也没有任何 matcher.groups() 。我真的不知道我在哪里出错了。

编辑

Pattern pattern = Pattern.compile(big);

我忘记添加该部分,因为正则表达式本身是另一个函数的返回,该函数返回已编译的模式。感谢您的所有帮助。

最佳答案

    Pattern pattern = Pattern.compile("/\\^(.*?)\\|");

String input = "/^/^this is a big|/*this is a bold text|/-this is strike through|";
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
System.out.println("Found: " + matcher.group(1));
}
System.out.println("That’s all, folks");

输出是:

Found: /^this is a big
That’s all, folks

如果您想删除 /^| 之间的文本,请使用 Matcher.appendReplacement() 文档中给出的习惯用法:

    StringBuilder sb = new StringBuilder();
while (matcher.find()) {
matcher.appendReplacement(sb, "/^|");
}
matcher.appendTail(sb);
System.out.println(sb.toString());
/^|/*this is a bold text|/-this is strike through|

为什么你的代码不起作用?

仔细看看 Jenkov 教程。它有这样的代码行:

    String patternString = "is";

该模式不以 / 开头,也不以 /g 结尾。因此,通过包含这些部分,您需要将它们包含在匹配的文本中。由于它们不在您的输入字符串中,因此您的模式无法匹配。此外,您的代码中缺少对 Pattern.compile 的调用。它位于教程中的此代码行中:

    Pattern pattern = Pattern.compile(patternString);

链接: documentation of Matcher.appendReplacement()

关于java - 正则表达式匹配器总是返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54721733/

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