В основном мой 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
";
КОД:
preg_match("~(?P<value>\d+(?:.\d+)*?)\h(?P<unit>ACT\sFC)~", $text, $act_fc);
Пример 1 показывает правильный текст "1200 АКТ FC". При выполнении preg_match 1200 присваивается значение, а ACT_FC присваивается единицам в массиве $ act_fc.
Однако, если существует случай, подобный примеру 2, только с «ACT FC», тогда массив $ act_fc пуст.
Не выполняя другой preg_match для проверки только для «ACT FC», есть ли способ вернуть ACT_FC? Возможно, «единица» может быть принудительно заполнена массивом, а «значение» может быть нулевым.
ПРИМЕЧАНИЕ. Я занимаюсь сопоставлением данных между новыми строками, поэтому часть кода важна, чтобы оставаться практически такой же.
Здесь нет причин использовать не-жадный квантификатор: '(?:. \ D +) *?'. Не забывайте, что точка означает любой символ (кроме новой строки), а не буквальную точку. Чтобы увидеть буквальную точку, вам нужно сбежать от нее: '\ .'. Если вам нужно сделать что-то необязательное, используйте квант '?'. –