2010-12-11 10 views
2

このパターンの正規表現を試してみました。 HTMLソースからこのような文字列を選択しました。正規表現で文字列の特定の部分を取り出そうとしています

<!-- TAG=Something/Something else -->

そして、時にはそれだけだ:私は正規表現がちょうど「何か」は、タグ=と、オプションの/の間、すなわち、すべてを一致させたいの両方のケースで

<!-- TAG=Something -->

私の最初の試みでした:

TAG=(.*)[/]?(.*) -->

しかし、最初の括弧は、タグ間のすべてが一致しない=と - >どんな。では、ここで正しい方法は何ですか?

答えて

2

はこれを試してみてください:

TAG=([^/]*)(?:/(.*))?--> 

グループ1は "何か" が含まれています。
グループ2には「Something else」またはnullが含まれます。

Test it.

+0

ありがとうございます。これは上手く簡潔に機能しました。^/を使用してみましたが、何らかの理由で正規表現(http://www.gethifi.com/tools/regex)をテストするために使用していたアプリが無効であると言っていました。再度、感謝します。 – Fredrik

2
<!--.*?=(.*?)(-->|/) 

それはあなたが必要なすべてを一致します。

1

が非貪欲修飾子?使用します。また

TAG=(.*?)[/]?.* --> 

[/]の使用状況が変わったようだ - あなたは、単一の文字を書くために文字クラスを必要としません。この特殊な構文の最も一般的な説明は、正規表現の区切り文字として/を使用していることが考えられます。つまり、/は特殊文字として扱われます。多くの(すべてではない)正規表現の方言では、#のような別の区切り文字を使ってこの問題を解決することは可能です。これにより、スラッシュをエスケープする必要がなくなります。

+0

彼は '\ /'の代わりに '[/]'を使いました。私はなぜ彼らがそれをするのかわかりませんが、私はそれが他の人によってここで行われているのを見ました。 –

+1

@Alin Purcaru:私は人々が斜め歯の症候群を避けるために '\ /'の代わりに '[/]'を使うと思います。 http://en.wikipedia.org/wiki/Leaning_toothpick_syndrome - これは問題ありません。しかし、私の意見では、デリミタをすべて変更するだけで良いのです。 –

+0

多くの場合、それは不可能です。 RegExをリテラルとして定義するときのように。しかし、議論は依然として立っています。 –

関連する問題