我想在字符串上使用更復雜的正則表達式和preg_split來獲取所有匹配的數組並保留分隔符。通常情況下,這很簡單,但試圖使用PREG_SPLIT_DELIM_CAPTURE並且在我的正則表達式中使用多組括號會證明是困難的。我將詳細說明:PHP preg_split和只保留整個正則表達式作爲分隔符,忽略括號內
我想解析一行中的IP地址並將整行分解爲一個數組,以便我可以專門做一些只有IP的事情,但我最終要顯示整行(我' m將格式應用於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正則表達式,並且有很多圓括號,我擔心只用一組圓括號就不可能重寫外。任何人都可以幫我嗎?我將不勝感激。或者,如果我有一個完全不同的方法可以讓我失蹤,請隨時指出我的方向。
這非常有用,謝謝! – Skyline969
不客氣:)(不要忘記標記問題爲答案) – Oussama
不幸的是,我解決了它不同的方式,但我不能回答我的問題一個小時左右。這種方式可行,但這不是我解決問題的方法。 – Skyline969