2017-02-09 13 views
-2

特定の文字列に一致するようにしようとしていますが、特定のリテラル文字列の一部ではない場合にのみ一致します。リテラル文字列<span class='highlight'></span>に含まれる結果を除外したいと思います。したがって、私が "light"、 "high"、 "pan"、 "an"などを検索すると、それらの2つのリテラルの一部ではない他の出現にマッチしたいと思います。特定の文字列の一部を除いた文字列と一致する正規表現

私は完全なHTMLを解析しようとしているわけではなく、決して変更されない2つの文字列しかリストしていません。クラスの値は決して 'ハイライト'から変更されません。

私は考えることができ、何も出てこなかった、ルックアラウンド、キャプチャグループ、ノンキャプチャグループなどのすべての方法を試しました。ルックアラウンドは機能していないようですが、排除するケースに関する文字列の位置が特定の順序であることが保証されていないため、私は賭けています。

これは正規表現のみで可能ですか?

+0

[RegExはXHTML内蔵タグ以外のオープンタグと一致する可能性があります](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags) –

+0

@ジャックマニーこれは、リンクされた質問への2番目の答えのケースだと思う:http://stackoverflow.com/a/1733489/764371。これは事例です。「限られた既知のHTMLセットを解析することが適切な場合があります。リテラル文字列 ''と ''の中で起こるマッチを除外することに興味があります。他の文字列やhtmlタグは気にしません。クラス名は決して変更されません。 – HotN

+0

質問を更新して、完全なHTML解析のように見なさずに、私が試合に取り組もうとしていることを明確にしようとしました。 – HotN

答えて

0

私は質問を適切に簡素化していると思っていましたが、間違っていました。私は、文字列を取っていたコードを継承し、一度に1つずつループし、一致するものを<span class="highlight"></span>でループすることによって、検索用語のリストを置換します。その結果、「光を見てください」というフレーズが、「光」を検索した場合に誤って見えることになりました。 "the"はマッチして置き換えられ、 "light"はマッチしましたが、 "the"の新しく置き換えられたタグと一致します。そのトリックは、個々の単語に実行された正規表現を修正するのではなく、それらをまとめて処理する正規表現に変更することでした。正規表現ではなく、theを使用して、light、正規表現はちょうどthe|lightである必要があります。

0

この方法は効果がありますか?

  1. 検索と置換、空の文字列を持つこれら二つのタグ:あなたの検索文字列をされた状態で終わるかもしれない。もちろん、

    s/(<span class='highlight'>|<\/span>)//g 
    
  2. あなたの文字列を検索する

をこれらのビットの1つ、「周り」 abcdを検索し、一致するab</span>cdを探します。あなたは、あなたが確かであるいくつかの文字シーケンスで置き換えることは、検索することができるものではないことを回避することができます。

あなたはまた、それらのタグに対して探している文字列の状況のコンテキストを失いますが、正確に達成しようとしていることを知らないと、それがあなたにとって重要であるかどうかをない。

+0

私は私の質問にすべての関連する詳細を提供していると思ったが、私は間違っていた。繰り返し正規表現を1つの正規表現に置き換えることは、私の解決策であることが判明しました。しかし、助けてくれてありがとう! – HotN

関連する問題