Java 如何更改此正则表达式以正确提取标记属性-应该很简单
我需要“抓取”自定义HTML标记的属性。我知道这类问题以前已经被问过很多次了,但是正则表达式真的让我头疼,而且我似乎无法让它工作 我需要使用的一个XML示例是Java 如何更改此正则表达式以正确提取标记属性-应该很简单,java,regex,Java,Regex,我需要“抓取”自定义HTML标记的属性。我知道这类问题以前已经被问过很多次了,但是正则表达式真的让我头疼,而且我似乎无法让它工作 我需要使用的一个XML示例是 -内容在这里- 我希望能够获取name属性的值,在本例中是nameValue。我所做的如下所示,但这将返回一个空值 我的正则表达式字符串(对于Java应用程序,因此使用\来转义)是: “()?*()?” 我正在尝试用引号抓住属性,我认为这是最简单和最通用的匹配模式。它不起作用,任何帮助都会帮助我保持头发。您的搜索是。使用“\.*?”(添加
-内容在这里-
我希望能够获取name属性的值,在本例中是nameValue。我所做的如下所示,但这将返回一个空值
我的正则表达式字符串(对于Java应用程序,因此使用\来转义)是:“()?*()?”
我正在尝试用引号抓住属性,我认为这是最简单和最通用的匹配模式。它不起作用,任何帮助都会帮助我保持头发。您的搜索是。使用“\.*?”
(添加了?
)。请注意,这一模式不能正确地处理嵌套的
元素
如果您不想执行语法检查,您也可以简单地使用:“\”
甚至是“\”
,以获得更好的简单性和性能
编辑:应为
Pattern re = Pattern.compile( "\\<editable name=\"(.*?)\"\\>" );
Pattern re=Pattern.compile(\\”;
我使用JavaScript,但它应该有助于尽可能使表达式非贪婪,并使用not匹配而不是任何字符匹配。不确定regexp与Java有多相似,但不要使用表达式\“*”
尝试使用\“[^\”]*\”
。这将搜索属性值中不是引号的任何字符,这意味着表达式不能匹配属性值以外的字符
希望这对你有所帮助,我认为你不需要在正则表达式的开头和结尾使用
(?
s。您需要加入一个捕获组,以便只获取此处的内容:
这对我很有用:
String xml = "RANDOM STUFF<!-- <editable name=\"nameValue\"> --> - content goes here - <!-- </editable> -->RANDOM STUFF";
Pattern p = Pattern.compile("<!-- <editable name=(\".*\")?> -->(.*)<!-- </editable> -->");
Matcher m = p.matcher(xml);
if (m.find()) {
System.out.println(m.group(2));
} else {
System.out.println("no match found");
}
正则表达式根本不擅长解析HTML(请参阅原因)。您需要的是一个HTML解析器。有关使用各种解析器的示例,请参见
您可能会发现使用HTML有帮助。HTML注释的存在是有充分理由的。我也不希望浏览器显示不起作用的标记。\?\>中的\是为了什么?为什么要逃避?和>字符?因为这些字符可以是正则表达式中的特殊字符。这个但不正确,请将其删除。实际上,在Java字符串中,我也应该转义反斜杠=>\\>。'和'!'不需要逃避。!在“负向前看”模式中使用,<在“向后看”模式中使用。事实上,>不需要被转义(现在)。但是这不会伤害AFAIK,所以我经常这样做。对于not quotes方法+1。仅供参考,Java正则表达式可以做JavaScript风格所能做的一切,还有很多。谢谢。是的,例如,我知道Javascript的正则表达式在某些方面是缺乏的。希望这能及时改善。
- content goes here -