2011-01-30 6 views
1

が、これは htmlのではありませんのでご注意ください。桜の正規表現タグ(未HTML)の間に座って、段落の複数行のコンポーネントを選択

* real time results: shows results as you type 
* code hinting: roll over your expression to see info on specific elements 
* detailed results: roll over a match to see details & view group info below 
* built in regex guide: doub<tagstart>le click entries to insert them into your expression 
* online & desktop: regexr.com or download the desktop version for Mac, Windows, or Linux 
* save your expressions: My Saved expr</tagstart>essions are saved locally 
* search Community expressions and add your own 

おかげ

+3

HTMLではないという事実は、「これらのタグを入れ子にすることはできますか?」という質問に対する回答よりも重要ではありません。 – Tomalak

+0

できません。申し訳ありませんが、htmlをreg-exingしないことについての質問へのリンクを投稿している人がたくさん欲しくなりました。 – Jason

答えて

3

EDIT:@Kobiが正しくコメントで指摘するように、以下のオリジナルのポストのはるかに単純なバージョンはもちろんです:

<(tagstart)>(.*?)</\1> 

元のバージョンでも動作し、他のすべてのステートメントが真残るので、私はそれをそのまま残します。


タグは入れ子にすることはできません(とのみ場合)場合:

<(tagstart)>((?:(?!</\1>).)*)</\1> 

説明:

<(tagstart)>  # matches "<tagstart>" and stores "tagstart" in group 1 
(    # begin group 2 
    (?:    # begin non-capturing group 
    (?!   #  begin negative look-ahead (... not followed by) 
     </\1>  #  a closing tag with the same name as group 1 
    )    #  end negative look-ahead 
    .    #  if ok, match the next character 
)*    # end non-capturing group, repeat 
)     # end group 2 (stores everything between the tags) 
</\1>    # a closing tag with the same name as group 1 

正規表現は、 "シングルライン" モード(に適用する必要があります「ドットオール」モードと呼ばれることもあります)。いずれか、または[\s\S]の代わりに.を使用してください。一般的に一致したテキスト任意のの間に2つの均等という名前のタグに

、代わりに<(tagstart)><(\w+)>を使用しています。

正規表現の味に応じて、逆参照の場合は\1の代わりに$1ではなく、追加のエスケープが必要なメタ文字のように、動作が異なる場合があります。

Rubular demoを参照してください。

+0

ここに先読みが本当に必要ですか? '。*? 'の怠惰なマッチはまったく同じように振る舞いませんか? – Kobi

+0

@コビ:うーん、あなたは正しい。私は複雑すぎると思っていたように見えます。良い説明のために+1 – Tomalak

+0

+1。ありがとうございました – Jason

2

は多分この正規表現:(\<tagstart\>)(.+)(\<\/tagstart\>)/sはあなたを助けるでしょうか? 2番目の試合は、あなたが探しているものになります。詳細は、demoを参照してください。

+0

最後に '/ m'(つまりマルチライン)オプションを追加するのを忘れました – digEmAll

+0

@digEmAll omg ...ありがとう、固定 – shybovycha

+0

@shybovycha:完全性のためのデモでも) – digEmAll

1
#!/usr/bin/perl -w 

undef $/; 

$_ = <>; 

m|<(.*?)>(.*)</\1>|s; 

print $2; 

あなたが本当に<tagstart><(.*?)>と決算についても同様のようなビットを交換するだけ<tagstart>が必要な場合。 undef $/ビットを使用すると、1回の読み取りでたくさんのことができ、$2は2番目の一致グループを選択します。 sと正規表現の末尾には、改行文字でも一致するように.が必要です。

関連する問題