Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.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_Xml_Regex_Groovy - Fatal编程技术网

基于Java正则表达式的字符串替换

基于Java正则表达式的字符串替换,java,xml,regex,groovy,Java,Xml,Regex,Groovy,在下面的用例中寻找Java中基于正则表达式的字符串替换。 我正在做一些基于Groovy的XML处理,由于一些自定义处理(这里不作详细介绍),生成的XML有一些无效的标记,例如 <?xml version='1.0' encoding='UTF-8'?> <Customer id="xyz" xmlns='http://abc.com'> <order orderGroup="mock"> <entry> <key>

在下面的用例中寻找Java中基于正则表达式的字符串替换。 我正在做一些基于Groovy的XML处理,由于一些自定义处理(这里不作详细介绍),生成的XML有一些无效的标记,例如

<?xml version='1.0' encoding='UTF-8'?>
<Customer id="xyz" xmlns='http://abc.com'>
<order orderGroup="mock">
    <entry>
        <key>test</key>
    </entry>
</order orderGroup="mock">
</Customer id="xyz">

测试
如果您注意到,包含属性的元素名称的结束标记会弄乱。XML只是作为字符串处理的,所以我想做的是,通过基于字符串正则表达式的替换来替换这些结束标记。例如,更换

</order orderGroup="mock"> with </order>, 
</Customer id="xyz"> with </Customer>
with,
具有
你知道有没有基于Java字符串的快速正则表达式可以用来替换吗


谢谢。

最简单的解决方案是修复自定义XML处理并使其生成有效的XML

简单的解决方案是使用类似的方法清理XML

如果必须使用正则表达式,可以尝试以下方法:

Pattern pattern = Pattern.compile("</([A-Za-z]+) [^>]+>");
Matcher matcher = pattern.matcher(xml);

if(matcher.find()) {
   xml = matcher.replaceAll(matcher.group(1));
}
Pattern=Pattern.compile(“]+>”);
Matcher-Matcher=pattern.Matcher(xml);
if(matcher.find()){
xml=matcher.replaceAll(matcher.group(1));
}
我还没有测试过,所以请记住这一点。可能会有一些问题

正则表达式的解释:

<         -> The opening angle bracket of the tag
/         -> The / that marks a closing tag
(         -> Start of a capturing group. We want to capture the actual ending tag.
[A-Za-z]+ -> One or more alphabetic characters (upper and lowercase)
)         -> End of the capturing group.
          -> A space.
[^>]+     -> One or more of anything that is not a closing angle-bracket.
>         -> The closing angle bracket of the tag.
<->标签的开口角支架
/->标记结束标记的/符号
(->捕获组的开始。我们要捕获实际的结束标记。
[A-Za-z]+->一个或多个字母字符(大写和小写)
)->捕获组结束。
->空间。
[^>]+->一个或多个非闭合角括号的内容。
>->标签的闭合角支架。

最简单的解决方案是修复自定义XML处理并使其生成有效的XML

简单的解决方案是使用类似的方法清理XML

如果必须使用正则表达式,可以尝试以下方法:

Pattern pattern = Pattern.compile("</([A-Za-z]+) [^>]+>");
Matcher matcher = pattern.matcher(xml);

if(matcher.find()) {
   xml = matcher.replaceAll(matcher.group(1));
}
Pattern=Pattern.compile(“]+>”);
Matcher-Matcher=pattern.Matcher(xml);
if(matcher.find()){
xml=matcher.replaceAll(matcher.group(1));
}
我还没有测试过,所以请记住这一点。可能会有一些问题

正则表达式的解释:

<         -> The opening angle bracket of the tag
/         -> The / that marks a closing tag
(         -> Start of a capturing group. We want to capture the actual ending tag.
[A-Za-z]+ -> One or more alphabetic characters (upper and lowercase)
)         -> End of the capturing group.
          -> A space.
[^>]+     -> One or more of anything that is not a closing angle-bracket.
>         -> The closing angle bracket of the tag.
<->标签的开口角支架
/->标记结束标记的/符号
(->捕获组的开始。我们要捕获实际的结束标记。
[A-Za-z]+->一个或多个字母字符(大写和小写)
)->捕获组结束。
->空间。
[^>]+->一个或多个非闭合角括号的内容。
>->标签的闭合角支架。
试试看

xml=xml.replaceAll(“]+).*?>”,“”);
试试看

xml=xml.replaceAll(“]+).*?>”,“”);

加载javadoc、按Ctrl-F并键入“regex”时会发生什么?为什么不修复产生垃圾的错误“自定义处理”,而不是尝试解决这个问题呢?当加载javadoc,点击Ctrl-F并键入“regex”时会发生什么?为什么不修复产生垃圾的错误“自定义处理”,而不是尝试解决这个问题呢?谢谢Vivin!这在一定程度上是可行的。唯一的问题是,它甚至替换了开始和结束的尖括号。换言之,它会导致客户,而不是如图所示,这个解决方案比它需要的要详细得多。特别是,在进行替换之前,无需调用
find()
replaceAll()
本身会执行此操作,如果没有匹配项,则返回原始字符串,保持不变。您也不需要为替换字符串调用
group(n)
之类的方法。如果字符串中出现任何问号或反斜杠,您将得到一个运行时异常;如果你使用
“$1”
,这不是问题。是的,他的答案好多了。谢谢Vivin!这在一定程度上是可行的。唯一的问题是,它甚至替换了开始和结束的尖括号。换言之,它会导致客户,而不是如图所示,这个解决方案比它需要的要详细得多。特别是,在进行替换之前,无需调用
find()
replaceAll()
本身会执行此操作,如果没有匹配项,则返回原始字符串,保持不变。您也不需要为替换字符串调用
group(n)
之类的方法。如果字符串中出现任何问号或反斜杠,您将得到一个运行时异常;如果你使用
“$1”
,这不是问题。是的,他的答案要好得多。+1,但我会使用
]+)[^>]+>
*?
是个善变的朋友;既然你可以很容易地说出你想要的,为什么还要听天由命呢?我同意\\s,但似乎正则表达式将“-->”转换为+1,但我会使用
]+)[^>]+>
*?
是个善变的朋友;既然你可以很容易地说出你想要的,为什么还要听天由命呢?我同意\\s的说法,但似乎正则表达式转换为“->”