我有以下通過從函數中獲取數組逐行返回。PHP的正則表達式解析行
[1mSlot別名UpRate DnRate的MinAct
[4M /標識鏈接鏈接
[0米1/1 113822003 0 0 1 1/1,1/2,1/5,2/1,
3/1,3/2,4/1,4/2
1/3 432144003 0 0 1 1/3,3/3
1/4 128447003 0 0 1 1/4,3/4
1/6 123458003 0 0 1 1/6,2/5,4/8,6/6,
6/25
1/9 123445003 0 0 1 1/9,1/31,2/18,3/9,
5/8,6/22,6/23,6/24,
6/26,7/8,7/11,7/13,
7/14,8/6,8/7, 8/8,
8/11,8/22,9/11,9/12
我有在http://www.regexr.com/工作,但不要在PHP一切工作的正則表達式如下表現如預期似乎。特別是EfmLinkRegex,負向前視功能不適用。前三個我使用preg_match()鏈接一個我使用preg_match_all()。我使用
$OrderRegex = '([0-9]{4,7}003)';
$GroupRegex = '(^[0-9]{1,2}\/[0-9]{1,2})';
$LinkRegex = '/(?!^[0-9]{1,2}\/[0-9]{1,2})([0-9]{1,2}\/[0-9]{1,2})/';
當前代碼:
foreach ($Data as $row)
{
preg_match($OrderRegex, $row, $OrderMatches);
preg_match($GroupRegex, $row, $GroupMatches);
preg_match_all($LinkRegex, $row, $LinkMatches);
}
我在我的示例輸入的3行運行在上面是第一「1/1」值是通過「[0米」開頭否定正則表達式(目前不起作用)。我還需要一種方法在沒有匹配訂單的行中添加鏈接,以將其分配給該訂單。
例如最終結果是:
Order: 113822003
Group: 1/1
Links: 1/1, 1/2, 1/5, 2/1, 3/1, 3/2, 4/1, 4/2
Order: 432144003
Group: 1/3
Links: 1/3, 3/3
Order: 128447003
Group: 1/4
Links: 1/4, 3/4
etc, etc, etc,
例如最終結果作爲數組:
陣列([組] =>數組([0] => 1/1)[訂購] =>數組( [0] => 113822003)[鏈接] =>數組([0] => 1/1 [1] => 1/2 [2] => 1/5 [3] => 2/1 [4] = > 3/1 [5] => 3/2 [6] => 4/1 [7] => 4/2))
我知道最有可能的東西很簡單我很想念這裏,但它是逃避我。如果我可以匹配「組」減去^,只要它以某種方式在順序之前,那麼只需將它添加到鏈接數組中?
編輯: 發現通過「$ row = substr($ row,1,strlen($ row));」傳遞每個$行似乎已經解決了我的問題與Group和Link正則表達式字符串拉動正確的匹配,我猜不知有些字符串的開頭有不可見的字符,不允許正則表達式中字符串指示符的開始正常工作。
所以現在我只需要弄清楚如何讓這個不包含「秩序」的任何行添加鏈接到上一行的鏈接匹配
代替我不是承擔你正在尋找的輸出。你可以爲你想要的輸出粘貼某種陣列嗎?你會樂意用一個正則表達式來完成嗎?它是否必須一行一行? – zx81
PHP的preg_ *函數需要分隔符,例如/.../或〜...〜。在第一種和第二種情況下,我認爲它是以()作爲分隔符。在'引號內添加〜分隔符。 –
是的,它必須是逐行的(或者更具體地說,每一行都是一個名爲「$ Data」的數組中的一個入口,所以我通過入口解析出它),這就是telnet類返回讀取行的方式從路由器。向其他兩個添加/.../對回報沒有幫助。 – James