これは、「唯一の正規表現」ではありませんが、それはあなたの入力文字列を考慮し、作業を行う必要がありますが$str
である:
いくつかの単語で
$lines = explode(PHP_EOL, $str);
$linesToKeep = array();
foreach ($lines as $line) {
if (!preg_match('#</?(' . $blockTags . ')>#', $line)) {
$linesToKeep[] = $line;
}
}
// Et voila ;-)
$strOK = implode(PHP_EOL, $linesToKeep);
var_dump($strOK);
:
- これは、文字列を爆発します(行ごとに保持または拒否したいので)行を操作します。行が
<TAG>
または</TAG>
が、それは最終的に$linesToKeep
配列
- に置かれているが含まれていない場合
- それはライン
- で行をループし、出力に含まの文字列はその配列に何から構築されてい
しかし、もっと短い方法があるかもしれません...しかし、それは理解するのが簡単です。私は推測します(何か「正規表現の地獄」ないしは誰も維持できないものは^^)
編集:私はOPを再読していたので、私はnotic
$lines = explode(PHP_EOL, $str);
$linesToKeep = array();
$i = 0;
$numLines = count($lines);
for ($i=0 ; $i<$numLines ; $i++) {
$line = $lines[$i];
if (!preg_match('#</?(' . $blockTags . ')>#', $line)) {
$linesToKeep[] = $line;
} else {
if (preg_match('#<(' . $blockTags . ')>#', $line)) {
// Opening tag, skip next line too ?
$i++;
}
}
}
$strOK = implode(PHP_EOL, $linesToKeep);
var_dump($strOK);
そして、あなたがしたい場合:それは私のコードではありませんしながら、最後の行は、あなたはそれの後に開始タグとライン、および1つを除外したい場合は、ここで別の命題だ...、除外された編閉じるタグまで行をスキップするには、$i++
を置く場所で行うことができますが、それは読んだり理解しづらいようになっています^^ (そして、HTMLの手書きを "解析する"というのは良い考えではないかもしれません。複雑なものにしたい^^)
正規表現ですべてが可能です。 :) – cakeforcerberus
@semirhage:ああ、私は今すぐコメントをdownvoteすることができますしたい。 – Sean
Darth Eruのようなサウンドはユーモアのセンスがありません。 –