Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.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 内部有尖括号的正则表达式XML标记_Java_Regex_Xml - Fatal编程技术网

Java 内部有尖括号的正则表达式XML标记

Java 内部有尖括号的正则表达式XML标记,java,regex,xml,Java,Regex,Xml,我需要一个正则表达式,它将给我一个XML标记,例如或 因此,如果我在这里使用,它会给我或或。这很好 现在,问题是: 我有一个XML作为 <VALUE ABC="10000" PQR="12422700" ADJ="" PROD_TYPE="COCOG EFI LWL P&amp;C >1Y-5Y" SRC="BASE" DATA="data" ACTION="INSERT" ID="100000" GRC_PROD=""/> 这里,如果您看到,PROD_TYPE=

我需要一个正则表达式,它将给我一个XML标记,例如

因此,如果我在这里使用
,它会给我
。这很好

现在,问题是:

我有一个XML作为

<VALUE ABC="10000" PQR="12422700" ADJ="" PROD_TYPE="COCOG EFI LWL P&amp;C >1Y-5Y" SRC="BASE" DATA="data" ACTION="INSERT" ID="100000" GRC_PROD=""/>

这里,如果您看到,
PROD_TYPE=“cococog EFI LWL p&;C>1Y-5Y”
在属性值中有一个大于符号

所以,正则表达式返回给我

1Y-5Y“SRC=“BASE”DATA=“DATA”ACTION=“INSERT”ID=“100000”GRC\u PROD=”“/>

<强>我需要一些正则表达式,它不会考虑小于或大于符号的值,即以双引号括起来的符号。< /强>

< p>可以尝试:

(?i)<[a-z][\w:-]+(?: [a-z][\w:-]+="[^"]*")*/?>
实现相同功能的
java
代码框架:

try {
    boolean foundMatch = subjectString.matches("(?i)(?:<([a-z][\\w:-]+)(?: [a-z][\\w:-]+=\"[^\"]*\")*>.+?</\\1>|<([a-z][\\w:-]+)(?: [a-z][\\w:-]+=\"[^\"]*\")*/>)");
} catch (PatternSyntaxException ex) {
    // Syntax error in the regular expression
}
试试看{
boolean foundMatch=subjectString.matches(“(?i)(?:)”);
}捕获(模式语法异常){
//正则表达式中的语法错误
}

希望这有助于…

扩展G_H的链接点:用于返回节点,并将该节点传递给标识:

还可以尝试以下方法:


只有当出现偶数个双引号时,它才会捕获
之间的所有内容。成对的双引号意味着内容被包含在。否则它将跳过
符号并继续搜索下一个
(这应该在关闭
引号后发生)

仅此一个:?!感谢您的解决方案。我刚刚将此更改为(?I)很高兴提供帮助…但是这样做,它不会在一次点击中匹配
。!!正如你在问题中提到的那样…我不需要它们在一次点击中匹配,而是需要它们分开。无论如何,谢谢!:)+1,很好的方法…虽然还没有测试过…顺便问一下,如果
xname
包含
namesoace
…如何处理?@Cylian I th用XPath写一个
“/*[local-name()='VALUE']”“
就可以了。@Cylian我不是.Net专家,但看起来确实像。我不确定你说的浏览器是什么意思;你是说JavaScript吗?
(?i)(?:<([a-z][\w:-]+)(?: [a-z][\w:-]+="[^"]*")*>.+?</\1>|<([a-z][\w:-]+)(?: [a-z][\w:-]+="[^"]*")*/>)
try {
    boolean foundMatch = subjectString.matches("(?i)(?:<([a-z][\\w:-]+)(?: [a-z][\\w:-]+=\"[^\"]*\")*>.+?</\\1>|<([a-z][\\w:-]+)(?: [a-z][\\w:-]+=\"[^\"]*\")*/>)");
} catch (PatternSyntaxException ex) {
    // Syntax error in the regular expression
}
Node valueElement = (Node)
    XPathFactory.newInstance().newXPath().evaluate("//VALUE",
        new InputSource(new StringReader(xmlDocument)),
        XPathConstants.NODE);

StringWriter result = new StringWriter();
TransformerFactory.newInstance().newTransformer().transform(
    new DOMSource(valueElement), new StreamResult(result));

String valueElementMarkup = result.toString();