iT邦幫忙

0

【Regex 的問題???】

  • 分享至 

  • xImage

我有一個用字串
我想要截取裡面的數字
數字有可能是 int float
範例如下

$lines = ' 加分項目8 15.test 4.00 -4.00 (4.00) 4.00 4.00 4.00 4.00 4.00 4';
preg_match_all('/\s+\(?-?\d+(\.\d+)?\)?/',$lines,$data);
print_r($data[0]);

結果為
Array
(
[0] => 15
[1] => 4.00
[2] => -4.00
[3] => (4.00)
[4] => 4.00
[5] => 4.00
[6] => 4.00
[7] => 4.00
[8] => 4.00
[9] => 4
)

我是希望那個 15 不要抓到
因為 15.後面不是接數字
不是我要的
請問要怎麼修改呢
謝謝

wiseguy iT邦超人 1 級 ‧ 2015-03-06 22:12:44 檢舉
andyto202提到:
(?: )?
這個可以用在
preg_match_all 裡面嗎

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

1 個回答

6
wiseguy
iT邦超人 1 級 ‧ 2015-03-06 16:19:29
最佳解答

語法改為
/\s+\(?-?\d+(\.\d+|(?!\d*\.[^\d]))\)?/
結果如下:
Array
(
[0] => 4.00
[1] => -4.00
[2] => (4.00)
[3] => 4.00
[4] => 4.00
[5] => 4.00
[6] => 4.00
[7] => 4.00
[8] => 4
)
主要是排除掉整數後面不能跟著 數字.非數字

andyto202 iT邦研究生 4 級 ‧ 2015-03-06 16:29:30 檢舉

\s+\(?-?\d+(\.\d+|(?!\d*\.[^\d]))\)?

wiseguy兄果然神
一下子就解決了
^_^

andyto202 iT邦研究生 4 級 ‧ 2015-03-06 16:30:12 檢舉

因為你太快解答了
我要選最佳解答要6小時過後
@_@

andyto202 iT邦研究生 4 級 ‧ 2015-03-06 17:29:33 檢舉

wiseguy兄
假設字串是有規則的
例如
15 4.00 3.00
2.05 1.03
之類的
就是一定是前面是有數字,再來就是接有小數點的數字
可以用缺項嗎
以前你教過可以用
(?: )?
這個可以用在
preg_match_all 裡面嗎

我要發表回答

立即登入回答