java - Java中具有可变长度零宽度lookbehind的正则表达式

标签 java regex regex-lookarounds

我知道 Java 不支持可变长度零宽度lookbehinds,但是有没有一种高效且有效的方法来模仿所需的行为?

我应用正则表达式的文本类似于:

blah words blah [tag platform="platform1, platform5" future]Blah Blah blah[/tag] blah more words

在开始标记中,列表中可以有任意数量的平台、任意顺序,并且可能的值数量有限。所需的输出是获取标签之间的文本:

Blah Blah blah

这就是我想要表示平台变量列表的方法:

(?<=\\[tag platform=\\\\\".*?\\\\\" future\\]).*?(?=\\[/tag\\])

但是它当然会抛出异常,并显示消息Look-behind group does not have an obliged max length

我想过使用正则表达式来获取包括标签在内的整个字符串(这很简单),然后解析该字符串。但这似乎有点太具体了,我想要一个更可靠的解决方案。

最佳答案

这应该适合你。无需回顾 只需“捕获”必要的部分并替换整个字符串(或其他内容)

public static void main(String[] args) {
    String s = "blah words blah [tag platform=\"platform1, platform5\" future]Blah Blah blah[/tag] blah more words";
    s = s.replaceAll(".*?\\[tag.*?\\](.*?)(?=\\[.*).*", "$1");
    System.out.println(s);
}

操作:

Blah Blah blah

关于java - Java中具有可变长度零宽度lookbehind的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52957633/

相关文章:

regex - SED Unix 命令,需要帮助将 .less 文件更改为 style.css

regex - Perl 中带有 * 修饰符的否定前瞻断言

java - 限制每行的输出

java - 使用 IntelliJ Idea 进行远程调试

java - 类对象关系如何工作?

不包括特定大小写的正则表达式混合大小写

javascript - 匹配给定的正则表达式,除非给定的单词存在(lookahead 或lookbehind)

java - spring-boot 2.0.6 速度 View 与资源加载器路径属性的问题

java - 在 Android 中使用 RegEx 拆分字符串

php - Twig 模板中的 "Begins with"