2016-05-17 68 views
0

基本上我的preg_match工作正常。但是,如果僅存在文本的部分值(不是數字),我需要知道嘗試嘗試輸入正確的內容。preg_match如何知道部分值存在

實施例1:

$text = "2000 FC 
2 A 
100 FH 
1200 ACT FC 
"; 

實施例2:

$text = "2000 FC 
2 A 
100 FH 
ACT FC 
"; 

CODE:

preg_match("~(?P<value>\d+(?:.\d+)*?)\h(?P<unit>ACT\sFC)~", $text, $act_fc); 

實施例圖1是表示正確的文本 「1200 ACT FC」。當執行preg_match時,1200分配給值,ACT_FC分配給$ act_fc數組中的單元。

但是,如果像例2那樣只有「ACT FC」的情況,那麼$ act_fc數組是空的。

沒有做另一個preg_match只檢查「ACT FC」,有沒有辦法返回ACT_FC被發現?也許「unit」可能被迫填充數組,「value」可能爲空。

注意:我正在處理換行符之間的數據匹配,因此部分代碼很重要,以保持幾乎相同。

+1

在這裏沒有理由使用非貪婪的量詞:'(?:。\ d +)*?'。不要忘記,點意味着任何字符(除了換行符)而不是字面點。爲了確定一個字面點,你需要將其轉義:'\ .'。如果你需要使用'''量詞'來選擇一些東西。 –

回答

3

可以使值部分可選的(?:...)?

preg_match("/(?:(?P<value>\d+(?:\.\d+)*?)\h)?(?P<unit>ACT\sFC)/", $text, $act_fc); 

這裏是demo。 這裏是regex tester

+1

在這種情況下最好使用非捕獲組。 –

+0

是的,你是對的。謝謝。更新了答案。 – sevavietl

+0

這個工程很好,除了有時候空間不足。像1200ACT FC – no1uknow

相關問題