我真正想做的是使用正则表达式来匹配标签和属性的所有命名空间前缀。
例如:
<foo:person bar:id="43">
text text <nomatch:free text
<baz:name>
text nomatch:free> text
</baz:name>
text nomatch:free="44" text
<age bae:years="44" />
text
</foo:person>
我想要的是只提取以下前缀:foo、baz、bad、bae、bar
我找不到实现此功能的正则表达式。
请注意正则表达式不应硬编码名称 foo、baz、bad、bae、bar...
有这样的吗?
[<]([^:]+)
会将前缀(尖括号之后、冒号之前)放入第 1 组。
仔细观察后,我发现我误解了这个问题。
[<](((\w+):\w+)(\s+(\w+):\w+="\d+"\s*[\/])?)>
这将产生 3 美元组和 5 美元组的结果。 我想这样就可以了。
哎呀,错过了?
[<](((\w+):\w+)(\s+(\w+):\w+="\d+"\s*[\/]?)?)>
这是用Python编写的:
import re
x='<foo:person bar:id="43">'
y=re.findall(r"(\w+)(?=:)",x)
print y
['foo', 'bar']
这是一个 Perl 版本:
my @collects = $str =~ /[<|\s](\w+):[^free]/ig;