説明
この正規表現は次のようになります。
- 最初を見つける
SEARCH_TERM_#1
- 後に始まるテキストをキャプチャ
SEARCH_TERM_#1
SEARCH_TERM_#2
またはSEARCH_TERM_#3
(どちらか早い方) に遭遇したときにテキストのキャプチャを停止します。
^.*?SEARCH_TERM_\#1((?:(?!SEARCH-TERM_\#2|SEARCH-TERM_\#3).)*)
エキスパンド
^
文字列の先頭に一致します。これにより、検索が先頭から開始されます
.*?
次の式までのすべての文字に一致します。s
この用語は、ドットを改行文字に一致させるオプションと組み合わせて使用する必要があることに注意してください
SEARCH_TERM_\#1
最初の検索語
(
キャプチャ グループを開始します。この一連の括弧は、一致した値をキャプチャ グループ 1 に入れます。
(?:
SEARCH-TERM_\#2
非キャプチャグループを開始します。これは本当の魔法であり、基本的に、含まれている式がまたはのいずれかにつまずくまで一致し続けることを可能にしますSEARCH-TERM_\#3
(?!
否定的な先読みを開始します。入力文字列を介してカーソルを移動する正規表現エンジンを考えてみてください。ルーハヘッドは、カーソルを移動せずに、カーソルの後の文字を見るだけです。否定は、見つかった式が一致したとして解決された場合は一致を拒否するか、式が見つからない場合は一致を許可することを意味します。
SEARCH-TERM_\#2|SEARCH-TERM_\#3
いずれかの値を探します。これ|
は「または」ステートメントです
)
否定的な先読みを閉じる
.
任意の文字に一致します。式は、前の否定先読みで検索語が見つからなかった場合にのみ、この場所に到達します。
)
非キャプチャ グループを閉じます。この時点で、#2 または #3 の終了条件に遭遇したか、非キャプチャ グループが単一の文字を検出したため、検索が停止しました。
*
すべての文字を貪欲に一致させ続けます。終了条件が式の中に含まれているため、greedy を使用できます。
)
キャプチャ グループを閉じる
PHP コード例
言語を指定しなかったため、この PHP の例は、その動作を示すためだけに含めています。
入力テキスト
skip this text SEARCH_TERM_#1 find this text SEARCH-TERM_#2 more text to ignore SEARCH_TERM_#3
コード
<?php
$sourcestring="your source string";
preg_match('/^.*?SEARCH_TERM_\#1((?:(?!SEARCH-TERM_\#2|SEARCH-TERM_\#3).)*)/ims',$sourcestring,$matches);
echo "<pre>".print_r($matches,true);
?>
マッチ
$matches Array:
(
[0] => skip this text SEARCH_TERM_#1 find this text
[1] => find this text
)
実際の例
または、コメントに含まれている実際の例を使用するには:
正規表現:^.*?style="background-image: url\(((?:(?!&cfs=1|\)).)*)
入力テキスト:<a href=http://i.like.kittens.com style="background-image: url(http://I.like.kittens.com?Name=Boots&cfs=1)">
一致:
[0] => <a href=http://i.like.kittens.com style="background-image: url(http://I.like.kittens.com?Name=Boots
[1] => http://I.like.kittens.com?Name=Boots
免責事項
これは、正規表現を使用して HTML を解析する際の一般的な問題のように見えます。入力テキストが HTML の場合は、正規表現ではなく HTML 解析ツールを使用して調査する必要があります。