説明
Cello と Lillian の両方を含む完全な文をキャプチャするこの正規表現のような前方参照を使用します。
(?:(?<=\.)\s+|^)((?=(?:(?!\.(?:\s|$)).)*?\b[Cc]ello(?=\s|\.|$))(?=(?:(?!\.(?:\s|$)).)*?\b[Ll]illian(?=\s|\.|$)).*?\.(?=\s|$))

式は、次の機能コンポーネントのように分解されます。
(?:(?<=\.)\s+|^)
.
任意の数のスペースが続くa の後、または文字列の最初の to で、この文の一致を開始します
(
この文全体をキャプチャするキャプチャ グループ 1 を開始します
(?=
先読みを始める
(?:(?!\.(?:\s|$)).)*?
正規表現エンジンがこの文を残さないように、.
空白または文字列の終わりが続くことを強制的に確認する
\b
単語 break に一致
[Cc]ello
目的のテキストをすべて小文字または大文字の頭文字に一致させます
(?=\s|\.|$)
.
文字列の末尾にスペース、 、または文字列の末尾があることを確認するために先読み
)
先見の終わり
(?=(?:(?!\.(?:\s|$)).)*?\b[Ll]illian(?=\s|\.|$))
これは本質的に同じことを行いますが、リリアンの場合は
.*?\.(?=\s|$)
ピリオドまでの文の残りをキャプチャし、ピリオドの後に空白または文字列の末尾が続くことを確認します
)
文末キャプチャグループ1
コード例
Python はよくわからないので、PHP の例を示します。match ステートメントで、式が改行文字と一致s
するようにするオプションを使用していることに注意してください.
入力テキスト
Cello is a yellow parakeet who sings with Lillian. Toby is a clown who doesn't sing. Willy is a Wonka. Cello is a yellow Lillian.
Cello likes Lillian and kittens.
Lillian likes Cello and dogs. Cello has no friends. And Lillian also hasn't met anyone.
コード
<?php
$sourcestring="your source string";
preg_match_all('/(?:(?<=\.)\s+|^)((?=(?:(?!\.(?:\s|$)).)*?\b[Cc]ello(?=\s|\.|$))(?=(?:(?!\.(?:\s|$)).)*?\b[Ll]illian(?=\s|\.|$)).*?\.(?=\s|$))/s',$sourcestring,$matches);
echo "<pre>".print_r($matches,true);
?>
マッチ
$matches Array:
(
[0] => Array
(
[0] => Cello is a yellow parakeet who sings with Lillian.
[1] => Cello is a yellow Lillian.
[2] =>
Cello likes Lillian and kittens.
[3] =>
Lillian likes Cello and dogs.
)
[1] => Array
(
[0] => Cello is a yellow parakeet who sings with Lillian.
[1] => Cello is a yellow Lillian.
[2] => Cello likes Lillian and kittens.
[3] => Lillian likes Cello and dogs.
)
)
文字列 Cello が Lillian の前にある文を絶対に一致させる必要がある場合は、次のような表現を使用します。ここでは、閉じ括弧を 1 つ移動しただけです。
(?:(?<=\.)\s+|^)((?=(?:(?!\.(?:\s|$)).)*?\b[Cc]ello(?=\s|\.|$)(?=(?:(?!\.(?:\s|$)).)*?\b[Ll]illian(?=\s|\.|$))).*?\.(?=\s|$))

入力テキスト
Cello is a yellow parakeet who sings with Lillian. Toby is a clown who doesn't sing. Willy is a Wonka. Cello is a yellow Lillian.
Cello likes Lillian and kittens.
Lillian likes Cello and dogs. Cello has no friends. And Lillian also hasn't met anyone.
キャプチャ グループ 1 の出力
[1] => Array
(
[0] => Cello is a yellow parakeet who sings with Lillian.
[1] => Cello is a yellow Lillian.
[2] => Cello likes Lillian and kittens.
)