我正在尝试手动为我的xml字符串添加一些前缀,为此我需要一个我似乎无法找到的特定java表达式,基本上这是我的字符串:
<?xml version="1.0" encoding="UTF-8"?>
<mediabericht xmlns:mb="http://www.mediabericht.org"><inhoud>Randominhoud 22</inhoud><netwerk>Twitter</netwerk><datum>1408625886036</datum><film>Gladiator</film></mediabericht>
我想为我的元素添加前缀,所以它应该如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<mb:mediabericht xmlns:mb="http://www.mediabericht.org"><mb:inhoud>Randominhoud 22</mb:inhoud><mb:netwerk>Twitter</mb:netwerk><mb:datum>1408625886036</mb:datum><mb:film>Gladiator</mb:film></mb:mediabericht>
我想做一些替换,但到目前为止我没有运气
我需要解决的第一个正则表达式是< but not <? or </
并使用replaceAll函数将它们替换为<mb:
(前缀)
然后我处理了第二次替换:
String prefixedString = xmlString.replaceAll("</", "</mb:");
答案 0 :(得分:1)
我需要解决的第一个正则表达式是
< but not <? or </
并使用replaceAll函数将这些替换为<mb: (the prefix)
这可以使用look-ahead来解决:
String prefixedString = xmlString.replaceAll("<(?![/?])", "<mb:");
答案 1 :(得分:1)
您可以尝试使用Lookaround
Lookaround(零长度断言)实际匹配字符,但随后放弃匹配,仅返回结果:匹配或不匹配。
<(?!\/|\?)
替换:<mb:
OR
(?<=<)(?!\/|\?)
替换:mb:
彭定康解释:
(?<= look behind to see if there is:
< '<'
) end of look-behind
(?! look ahead to see if there is not:
\/ '/'
| OR
\? '?'
) end of look-ahead
示例代码:
System.out.println("<abc></abc>".replaceAll("(?<=<)(?!\\/|\\?)", "mb:"));
或者只是使用@Avinash Raj建议的<\b
,其中\b
被用作字边界。
System.out.println("<abc></abc>".replaceAll("<\\b", "<mb:"));
答案 2 :(得分:1)
只需一个正则表达式即可完成所有操作:
String prefixedString = xmlString.replaceAll("(</?)([^?])", "$1mb:$2");
只会在一次<?xml>
来电中正确替换开始和结束标记(并忽略replaceAll()
标记)。