iT邦幫忙

0

【Regex 的問題 (2)???】

$lines = array(' a1 15 1.00 -2.00 (3.00) 4.00 5.00 6.00 7.00 8.00 9','a2 1.10 -2.20 (3.30) 4.40 5.50 6.60 7.70 8.80 4');
foreach($lines as $line)
{
	preg_match_all('/\s+\(?-?\d+(\.\d+|(?!\d*\.[^\d]))\)?/',$line,$data);
	$result[] = $data[0];
}
print_r($result);

結果是
Array
(
[0] => Array
(
[0] => 15
[1] => 1.00
[2] => -2.00
[3] => (3.00)
[4] => 4.00
[5] => 5.00
[6] => 6.00
[7] => 7.00
[8] => 8.00
[9] => 9
)

[1] => Array
(
[0] => 1.10
[1] => -2.20
[2] => (3.30)
[3] => 4.40
[4] => 5.50
[5] => 6.60
[6] => 7.70
[7] => 8.80
[8] => 4
)

)

$result[1]的陣列裡面
缺了一項
所以它的數量是9
請問正規要怎麼改
才能讓
$result[1]的內容為

[0] =>
[1] => 1.10
[2] => -2.20
[3] => (3.30)
[4] => 4.40
[5] => 5.50
[6] => 6.60
[7] => 7.70
[8] => 8.80
[9] => 4

也就是缺的第1頁補空值
另外問一下
是不是要抓的 $line 裡面
數字格式要對齊才好抓呢
例如
2行line的內容

a1 15 1.00 -2.00 (3.00) 4.00 5.00 6.00 7.00 8.00 9
a2 1.10 -2.20 (3.30) 4.40 5.50 6.60 7.70 8.80 4

就是同欄位的格式要一樣(數字對數字,浮點數對浮點數)
這樣子來弄抓缺項才會可行呢

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

6
wiseguy
iT邦超人 1 級 ‧ 2015-03-08 00:47:12
最佳解答
  1. RegExp 沒有比對不到就補空值這種用途。雖然硬要去比對出十個數值不是不行,不過解出來的樣版根本彈性(適用性、維護性)很低。因為太複雜。

  2. 寫程式,別一味死腦筋去鑽牛角尖。一定非得用 RegExp 去解是否有遺漏嗎?像你的這個例子,只需要在4,5行之間補一行:

    <pre class="c" name="code">while (count($data[0]) < 10) array_unshift($data[0], '');

不就好了嗎?

iT邦幫忙MVPwiseguy提到:
一定非得用 RegExp 去解是否有遺漏嗎?

不就是古人說的:為賦新詞強說愁
汗

我要發表回答

立即登入回答