preg_match_all()overの推奨について Bart に同意しませんpreg_split()。
タスクは文字通り、文字列全体をさまざまな区切り文字で「分割」することです。最初に、正規表現よりも dom パーサーを使用する安定性をお勧めしますが、入力 html が比較的予測可能/単純であるためにそのレベルの安定性が必要ない場合は、より安価で簡潔な代替手段として正規表現を使用できます。
コード: (デモ)
$html = <<<HTML
<p>Some content <a href="www.test.com">A link</a></p>
HTML;
var_export(preg_split('~\s+|(<[^>]+>)~', $html, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE));
出力:
array (
0 => '<p>',
1 => 'Some',
2 => 'content',
3 => '<a href="www.test.com">',
4 => 'A',
5 => 'link',
6 => '</a>',
7 => '</p>',
)
私のパターンは、1 つ以上の空白文字または (弱い解釈の) html タグで分割されます。空白は単に破棄されます。タグは出力に保持されます。
論理セマンティクスを超えpreg_split()て、肥大化が少なく、したがってより直接的な出力を生成するという追加の利点があります。 preg_split()は 1 次元配列をpreg_match_all()提供し、多次元配列を提供します。
最後に、力preg_split()のように「失敗」することはできませpreg_match_all()ん。入力文字列にスペースやタグが含まれていない、ありそうもないフリンジ ケースを想像してみてください。preg_split()入力文字列全体を単一の要素配列として返します (便利で、より一般的な入力文字列と一致します)。preg_match_all()空の配列を生成します (あまり役に立ちません)。