[英]Java Regex check if string contains XML tag
我试图使用String.match()
函数确定字符串是否包含至少一个XML标记。 由于项目的设置方式,我更愿意,如果我不必使用Pattern
。
目前我使用这个正则表达式:
<[A-Za-z0-9]+>
这显然只检查字符串是否包含包含文本的右箭头括号和左箭头括号。 我需要的是一种方法来检查字符串是否只有一个带有Regex的XML标签,例如输入如下:
blah <abc foo="bar">blah</abc> blah
blah <abc foo="bar"/>
但不输入如下:
blah <abc> blah
blah <abc </abc> blah
那可能吗?
这个:
if (input.matches("(?s).*(<(\\w+)[^>]*>.*</\\2>|<(\\w+)[^>]*/>).*"))
匹配两种类型的标签(标准和自动关闭):
<abc foo="bar">blah</abc>
<abc foo="bar"/>
不匹配不完整的标签,如:
<abc>
请参阅regex现场演示 。
您可以使用:
if (input.matches("(?s).*?<(\\S+?)[^>]*>.*?</\\1>.*")) {
// String has a XML tag
}
(?s)
是DOTALL
标志,也可以使DOT匹配换行符。
好的,这个正则表达式将匹配大多数html / xml标签。
可能只需要节点标签,其余的可以剥离。
只是节点标签(最终编辑) -
# "(?s)<(?:/?[\\w:]+\\s*|[\\w:]+(?:\".*?\"|'.*?'|[^>]*?)+)>"
(?s)
<
(?:
/?
[\w:]+
\s*
|
[\w:]+
(?: " .*? " | ' .*? ' | [^>]*? )+
)
>
全 -
# "<(?:(?:/?[\\w:]+\\s*/?)|(?:[\\w:]+\\s+(?:(?:(?:\"[\\S\\s]*?\")|(?:'[\\S\\s]*?'))|(?:[^>]*?))+\\s*/?)|\\?[\\S\\s]*?\\?|(?:!(?:(?:DOCTYPE[\\S\\s]*?)|(?:\\[CDATA\\[[\\S\\s]*?\\]\\])|(?:--[\\S\\s]*?--)|(?:ATTLIST[\\S\\s]*?)|(?:ENTITY[\\S\\s]*?)|(?:ELEMENT[\\S\\s]*?))))>"
<
(?:
(?:
/?
[\w:]+
\s*
/?
)
|
(?:
[\w:]+
\s+
(?:
(?:
(?: " [\S\s]*? " )
| (?: ' [\S\s]*? ' )
)
| (?: [^>]*? )
)+
\s*
/?
)
|
\?
[\S\s]*?
\?
|
(?:
!
(?:
(?:
DOCTYPE
[\S\s]*?
)
| (?:
\[CDATA\[
[\S\s]*?
\]\]
)
| (?:
--
[\S\s]*?
--
)
| (?:
ATTLIST
[\S\s]*?
)
| (?:
ENTITY
[\S\s]*?
)
| (?:
ELEMENT
[\S\s]*?
)
)
)
)
>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.