我了解到Java不支持可变长度零宽度后退,但有没有一种有效且有效的方法来模仿所需的行为?
我将正则表达式应用于的文本如下:
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 obvious maximum length
。
我曾经考虑过使用正则表达式来获取包括标签的整个字符串(这很简单),然后解析该字符串。但这似乎太具体了,我想要一个更防弹的解决方案。
答案 0 :(得分:2)
这应该为您工作。无需后视 只需“捕获”必要的部分并替换整个字符串(或其他内容)
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);
}
O / P:
Blah Blah blah
答案 1 :(得分:0)
您可以使用非捕获组在比赛中包含事物,但不能捕获 只需记住要从第一个捕获组中拉出,而不是从整个比赛中拉出
WITH SelectedData AS
(
SELECT TOP 1 Id, Name, Title
FROM dbo.People
WHERE Id = 2
)
UPDATE SelectedData
SET Title = 'Manager'