Простая квадратная скобка REGEX отрицательное соответствие или начало строки?

У меня, по-видимому, простая, но раздражающая проблема с регулярными выражениями, использующая функцию 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, потому что это первое число, которому не предшествует + — правильно


Итак, простой вопрос: как сделать так, чтобы отрицательный оператор в квадратных скобках не совпадал с символами +, но работал, если число находится в самом начале строки?

0

Решение

Ну, вы должны заменить строка, но не + часть вашего регулярного выражения строка, но не + или начало строки :

/(?:^|[^\+][?\s])((\d+)?([.,])?\d+)/

(?: за непревзойденную скобку и просто начало ^ или ваш предварительный матч [^\+][?\s],

Редактировать:

Как сказал Брейдон Батунгбакал, это не совсем то, что вы хотите, так как это регулярное выражение не работает для 10 test, Я полагаю, мы могли бы сделать это таким образом:

/(^|[^\+])(^|[?\s])((\d+)?([.,])?\d+)/

Это работает, но я не нахожу это действительно удовлетворяющим. Если кто-то найдет лучшее решение …

Кстати, обратите внимание, что это регулярное выражение также совпадает, когда нет места после число. Я не знаю, хотите ли вы этого или нет.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]