ドットを使用するのは恐ろしい習慣であるため、私はこれを行っているだけです。正規表現で何か間違ったことをしているという見返りは、Single-Line オプションを使用する場合です。これはリソースの膨大な浪費であり、ある時点で破綻します。
これは、99.9% 確実に使用する必要があるものです。
$street_address_regex = '~14px;">([^<]*)~i';
または、(何らかの理由で) < を正当な文字として期待している場合は、小なりを意味するか、太字やイタリックなどの書式設定タグを意味する場合、次のようにすることができます。
$street_address_regex = '~14px;">([^<]*<)*?\/span~i';
そして、文字列の最後の文字をフォーマットする必要がないほど気になる場合は<
、次のようにすることができます。
$street_address_regex = '~14px;">((?:[^<]*(?(?!<\/span)<))*)~i';
.
このテスターでテストする
.
しかし、正直なところ、正規表現を使用するべきではありません。のストリップを見つけて、<span style="font-size:14px;">
その長さを追加します (アドレスの開始点を取得するため)... 次に、 のストリップを見つけて、以前に見つかったインデックスのオフセットポイントを</span>
入力します (アドレスの終了点を取得するため)。それらを引いて長さを取得します。次に、OriginalString、StartIndex、および Length を使用してsubstrをプルします。
たくさんのように聞こえますが、Regex の代わりに使用する小さな関数を作成し、OriginalString、StartString、および EndString を入力するだけです...次に、前述のメソッドを使用して StartString と EndString の間の内容を返します。関数を再利用可能にします。
その関数を使用すると、コードのその部分は文字通り少なくとも 10 倍高速に実行されます。正規表現はパターンにとって非常に強力ですが、パターンはありません.2つの静的文字列があり、それらの間のコンテンツが必要です。正規表現は、静的な文字列操作では非常に遅いです...特に、単一行でドットを使用する〜震え〜
$Input = '<span style="font-size:14px;">736 E 17th St</span><br />';
echo GetBetween($Input, '14px;">', '</span');
function GetBetween($OrigStr, $StartStr, $EndStr) {
$StartPos = stripos($OrigStr, $StartStr) + strlen($StartStr);
$EndPos = stripos($OrigStr, $EndStr, $StartPos);
return substr($OrigStr, $StartPos, $EndPos - $StartPos);
}