2017-03-24 13 views
1

私は今、私のRegexをほぼ失ったと思います(このコミュニティのおかげで)。私は、次の正規表現がありますRegexがあまりにも多くの一致を見つけた

== [A-Za-z\\s]+ == 

私はウィキペディアからテキストを探していますが、これは私が検索した後、テキストを分割するつもりですか。例:

== References == or == External Links == 

しかし、いくつかの回は、私のようなものでしょう:

/^== [A-Za-z\\s]+ ==$/ 
(?<![\w\d])== [A-Za-z\\s]+ ==(?![\w\d]) 
/\b== [A-Za-z\\s]+ ==\b/  

私と任意の助けを:私は満足のいく結果を以下にそれを変更しようとした

=== Some thing === <-- This is not picked up. Great! 
==== Some other Thing ==== <-- "== Some other Thing ==" is picked up. Bad! 

を正規表現?

+0

あなたがマッチさせたいと思ったことを私に話してくれたら、私は非常に助けになります。 – thebjorn

+0

あなたの正規表現は '=='の間に何かを拾います。なぜそれは '他の何か 'を拾うべきではないのですか? – Barmar

+0

ああ、 '=='は一致させたいが、 '==='の間は一致させたくない。 – Barmar

答えて

3

=がある場合は、negative lookaroundsを使用してマッチングを禁止してください。

(?<!=)== [A-Za-z\s]+ ==(?!=) 

DEMO

+0

これはそれかもしれないと思います。私は否定的なルックアラウンドが事であることを知らなかった(正規表現は基本的に私にとっては黒い魔法で<。<)。ちょっと待って。 – OmniOwl

+0

ええ、それはトリックを行うようです。ありがとう! :) – OmniOwl

1

あなたのためにこの仕事をしていますか?

[=]+ [A-Za-z\\s]+ [=]+

私はそれが2つの辺が一致せないが、それは今すべてのインスタンスを拾う必要があります知っています。

制限する必要がある場合は、[=]+[=]{1,3}に変更することもできます。

+0

申し訳ありませんが、私はコメントが表示されませんでした。あなたが正確に==を望むなら、コードを '[=] +'から '[=] {2}'に変更してください。 –

+0

'[=] {2}'と '=='の違いは、元の正規表現と同じですか? – Barmar

+0

彼が持っている問題は、最初の '= 'の後にマッチが始まるので、正確に' == 'とマッチすることは' === 'のマッチングを排除しないということです。 – Barmar

1

あなたは

(?<!=)==\s*([^=]+)\s*==(?!=) 

a demo hereを参照して、それを達成することができました。
これは、ネガティブルックアラウンドとネゲートされた文字クラスを使用します。


ただ、訓練目的のために、あなたに選択肢を与えるために、あなたにも、サブルーチンを使用することができます。

(?(DEFINE) 
    (?<left>(?<!=)(?==)) 
    (?<right>(?<==)(?!=)) 
    (?<separator>(?&left)==(?&right)) 

) 
(?&separator) 
(.+?) 
(?&separator) 

は、同様にthis on regex101.comのためのデモを参照してください。

関連する問題