文字列でより複雑な正規表現と preg_split を使用して、すべての一致の配列を取得し、区切り文字を保持しようとしています。通常、これは簡単ですが、PREG_SPLIT_DELIM_CAPTURE を使用しようとして、正規表現で複数の括弧のセットを使用するのは難しいことがわかっています。詳しく説明します:
行内の IP アドレスを解析し、行全体を配列に分割して、具体的には IP のみで何かを実行できるようにしたいのですが、最終的に行全体を表示したい (私は IP にフォーマットを適用してから再-文字列の組み立てと表示)。そのための私の正規表現はこれです(IPのように見えるものをチェックしますが、有効性はチェックしません。この時点では気にしません):
(((\d{1,3})\.){3}(\d{1,3}))
今のところ、私のコードは次のとおりです。 $ipv4regex = "/(((\d{1,3}).){3}(\d{1,3}))/";
if (contains_ipv4($line)){
$pieces = preg_split($ipv4regex, $line, 0, PREG_SPLIT_DELIM_CAPTURE);
print "<pre>";
print_r($pieces);
print "</pre>";
}
function contains_ipv4($val){
return (preg_match($ipv4regex, $val));
}
そして、これが私の出力のサンプルです(IPアドレスは変更されましたが、まだ関連しています):
Array
(
[0] => show arp results from
[1] => 10.10.15.120
[2] => 15.
[3] => 15
[4] => 120
[5] =>
)
出力が次のようになるように変更するにはどうすればよいですか。
(
[0] => show arp results from
[1] => 10.10.15.120
[2] =>
)
基本的に、PREG_SPLIT_DELIM_CAPTURE の正規表現で最も外側の括弧のみをキャプチャし、内側の括弧はキャプチャしたくありません。この特定のケースに合わせて正規表現を変更できることはわかっていますが、多くの括弧を使用した「適切な」IPv6 正規表現を持っているため、外側。誰か助けてくれませんか?私はそれを大いに感謝します。または、私が見逃しているまったく別の手段がある場合は、遠慮なくその方向に向けてください.