2016-09-05 16 views
1

XML文書のすべての開始タグをRegExと一致させるにはどうすればよいですか?私はちょうど使用されたタグ名を収集する必要があります。RegExすべてのXMLタグを見つける

これは私が持っているものです。

(?<=<)(.*?)((?= \/>)|(?=>)) 

これは、すべての始まりと終了タグが一致します。

例:コードの一致の上

<Habazutty>yaddayadda</Habazutty> 
<Vogons /> 
<Targ>blahblah</Targ> 

Habazutty 
/Habazutty 
Vogons 
Targ 
/Targ 

私は、私は終了タグを除外する方法を見つけ出すことができませんでした

Habazutty 
Vogons 
Targ 

を必要としています。否定的な先読みは機能しませんでした - 何も見つかりませんでした。私はうんざりしているに違いない。

+0

ケアを持っているのだろうか?改善が必要なものは何ですか?それともランダムな怒りの旅で? – vacip

答えて

0

あなたは(?<=<)([^\/]*?)((?= \/>)|(?=>))(?<=<)(.*?)((?= \/>)|(?=>))を変えることができる、すなわち、代わりにタグ名用(.*?)を使用しての、([^\/]*?)を使用しています。とにかく/はタグ名に使用できません。

((?=<)(?!<\/)<)(.*?)((?= \/>)|(?=>)) 

基本的にこれ((?=<)(?!<\/)<)は "<" (?=<)なく "< /" (?!<\/)あるすべてのものの後ろになります。

+0

ありがとう、非常に素晴らしいソリューション! – vacip

0

は、別の解決策を見つけました。

@ Rednebの答えはよりクリーンですが、キャプチャするグループが少なく、短くて魅力的です。

+0

また、このネガティブな外観はおそらく高価です。 – redneb

1

あなたは、単に使用してこれを達成することができます

<([^\/>]+)[/]*> 

グループのキャプチャは、あなたの出力の両方の答えと質問をdownvotingにコメントする

+0

非常にいいです、ありがとう!あなたは最後の/の前にエスケープを逃した、 '<([^\/>] +)[\ /] *>' – vacip

関連する問題