2016-04-16 3 views
-2

Я пытаюсь сопоставить, даже если ничего нет. Моя строка матча: Linha digitavel 999999 Барра: vencimento: 07/08/2017PHP Regex Match nothing

Я это регулярное выражение:

preg_match("/Linha digitavel ([\.0-9\s]+) barra: ([0-9]+|\0) vencimento: (.*)/", $input, $output); 

прекрасно работает, когда есть что-то на Барра, но потерпеть неудачу, если там нет. Я попытался использовать ([0-9] + |), ([0-9] *) и ([0-9] {0,}), ни одна из них не работает.

Тестовые строки:

Не работает:

Linha digitavel 3083981 barra: vencimento: 07/08/2017 

Работы:

Linha digitavel 3083981 barra: 0303456 vencimento: 07/08/2017 
+0

Можете ли вы показать пример строки с недостающими данными, для выяснения этого вопроса? – rjdown

+0

Да, конечно. Не работает: Linha digitavel 3083981 Барра: vencimento: 07/08/2017 работ: Linha digitavel 3083981 Барра: 0303456 vencimento: 07/08/2017 – Martin

ответ

1

Проблема в том, что если значение barra отсутствует, есть еще одно меньше места. Вам также нужно учитывать это, делая пространство необязательным.

preg_match("/Linha digitavel ([\.0-9\s]+) barra: ([0-9]*|\0)\s?vencimento: (.*)/", $input, $output);

(также изменен [0-9]+ к [0-9]* сделать необязательным)

https://regex101.com/r/fV8nT9/1

+0

Вот именно то, что случилось, спасибо! – Martin

0

Попробуйте следующее:

preg_match("/Linha digitavel ([\.0-9\s]+) barra: ([0-9]+|\0)? vencimento: (.*)/", $input, $output); 

Обратите внимание, что знак вопроса, который обозначает число, является необязательным.