【问题标题】:Why does this regex not seem to work?为什么这个正则表达式似乎不起作用?
【发布时间】:2014-10-02 00:28:04
【问题描述】:

我有要在文件中替换的字符串,当我看到 hostName=some_word 时,我想用 some_other_word 替换它,但我使用的零宽度负后向正则表达式似乎在 java 代码中失败,尽管工作当我在在线 Java 正则表达式测试器上对其进行测试时。

line = "hostName=testing"
Pattern host = Pattern.compile("(?<=hostName=).*");
Matcher match = host.matcher(line);
hostName = match.group(); //illegal state exception
line.replace(hostName,"new_name");

我在网上尝试了该正则表达式,它似乎工作正常:

链接: http://ocpsoft.org/tutorials/regular-expressions/java-visual-regex-tester/#!;t=hostName%3Dtesting&amp;r=(%3F%3C%3DhostName%3D).*&amp;x=new_name

【问题讨论】:

    标签: java regex


    【解决方案1】:

    您需要在调用matcher.group() 之前调用matcher.find()(输入匹配)或matcher.matches()(整个输入匹配)。

    通常在 if 条件内(或 while 循环,如果遍历匹配项)。

    APIMatcher.group()

    投掷:

    IllegalStateException - 如果尚未尝试匹配,或者如果 上一次匹配操作失败

    【讨论】:

    • 好的,是的,这绝对是问题,谢谢!恼人的是,java 文档没有提到在分组之前运行 find() 命令的任何内容
    • @sreya 不要对自己太苛刻 - 很容易错过。
    猜你喜欢
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    相关资源
    最近更新 更多