gpt4 book ai didi

java - 匹配器找到一个模式,但抛出 No match available on `start` 方法

转载 作者:行者123 更新时间:2023-12-01 07:43:37 25 4
gpt4 key购买 nike

我想获取正则表达式后文本的子字符串,因此我使用 find 检查它是否存在,然后尝试获取 start/end/group 但抛出 java.lang.IllegalStateException: No match available

String text = "Hello bob, remind me to do a lot of things today";
pattern = Pattern.compile("remind.*.to.");
// Looking for "remind <anyWord> to "
if (pattern.matcher(text).find())
{
pattern.matcher(text).group();
}

找到了正则表达式,因此我处于条件中,但是 start() (/任何其他 int 方法)抛出异常。

最佳答案

问题是您正在使用 pattern.matcher(text)再次创建另一个 Matcher实例以及当您调用 start() 时在新实例上,它会抛出异常,因为 findmatcheslookingAt之前没有被调用过。

你可以这样使用它:

String text = "Hello bob, remind me to do a lot of things today";
final Pattern pattern = Pattern.compile("remind.*\\hto\\h");
Matcher m = pattern.matcher(text); // create it only once
// Looking for "remind <anyWord> to "
if (m.find()) {
System.err.println( "Start: " + m.start() + ", match: " + m.group() );
}

另请注意正则表达式中的更改。 \h匹配水平空白,而 .to.将匹配 to 之前和之后的任何字符因此你的正则表达式将匹配:

"remind me to do a lot of things tod"

而不是预期的:

"remind me to do " 

关于java - 匹配器找到一个模式,但抛出 No match available on `start` 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60258085/

25 4 0
文章推荐: java - 带有 int : Java believes i want to convert to boolean 的 If 语句
文章推荐: jquery - 单击滚动按钮,每隔几秒只需单击一次
文章推荐: jquery - 如何同时删除多个append()
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com