У меня, по-видимому, простая, но раздражающая проблема с регулярными выражениями, использующая функцию PHP preg_match
По сути, я хочу сопоставить любую цифру, которая не начинается с + и все еще совпадает в начале строки.
Текущее регулярное выражение, которое у меня есть сейчас, работает, но не совпадает в начале строки.
Регулярное выражение
/[^\+][?\s]((\d+)?([.,])?\d+)/
Вот некоторые тестовые данные и ожидаемые значения, которые он должен поймать.
test 10 test
ловит 10 — правильно.
10 test test
10 не ловит, но должно — неверно.
+10 test test
10 не ловит, потому что начинается с плюса — правильно.
test + 10 test test
Не ловит 10, потому что начинается с плюса и имеет дополнительный пробел между плюсом и числом — правильно
тест +10 13 51 23
Ловит 13, потому что это первое число, которому не предшествует + — правильно
Итак, простой вопрос: как сделать так, чтобы отрицательный оператор в квадратных скобках не совпадал с символами +, но работал, если число находится в самом начале строки?
Ну, вы должны заменить строка, но не +
часть вашего регулярного выражения строка, но не +
или начало строки :
/(?:^|[^\+][?\s])((\d+)?([.,])?\d+)/
(?:
за непревзойденную скобку и просто начало ^
или ваш предварительный матч [^\+][?\s]
,
Редактировать:
Как сказал Брейдон Батунгбакал, это не совсем то, что вы хотите, так как это регулярное выражение не работает для 10 test
, Я полагаю, мы могли бы сделать это таким образом:
/(^|[^\+])(^|[?\s])((\d+)?([.,])?\d+)/
Это работает, но я не нахожу это действительно удовлетворяющим. Если кто-то найдет лучшее решение …
Кстати, обратите внимание, что это регулярное выражение также совпадает, когда нет места после число. Я не знаю, хотите ли вы этого или нет.
Других решений пока нет …