我知道 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/