Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何更改此正则表达式以正确提取标记属性-应该很简单_Java_Regex - Fatal编程技术网

Java 如何更改此正则表达式以正确提取标记属性-应该很简单

Java 如何更改此正则表达式以正确提取标记属性-应该很简单,java,regex,Java,Regex,我需要“抓取”自定义HTML标记的属性。我知道这类问题以前已经被问过很多次了,但是正则表达式真的让我头疼,而且我似乎无法让它工作 我需要使用的一个XML示例是 -内容在这里- 我希望能够获取name属性的值,在本例中是nameValue。我所做的如下所示,但这将返回一个空值 我的正则表达式字符串(对于Java应用程序,因此使用\来转义)是: “()?*()?” 我正在尝试用引号抓住属性,我认为这是最简单和最通用的匹配模式。它不起作用,任何帮助都会帮助我保持头发。您的搜索是。使用“\.*?”(添加

我需要“抓取”自定义HTML标记的属性。我知道这类问题以前已经被问过很多次了,但是正则表达式真的让我头疼,而且我似乎无法让它工作

我需要使用的一个XML示例是

-内容在这里-

我希望能够获取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 -