2013-12-06 7 views
0

Я пытаюсь использовать preg_match_all для проверки синтаксических ошибок с запятой, где «привет, там» хорошо, но не «привет, там».php regex найти строку, которая не имеет определенной длины

Сначала я понимаю, что пространство, двойные кавычки, и разрыв строк все приемлемы после запятой, поэтому я считаю, что я могу сделать preg_match_all("/(,[^ \r\n\"])/", $mystring, $result); и все, что возвращение означает, что есть ошибка синтаксиса.

Тогда я понимаю, что запятые также отображаются в цифрах, например. 1,234,567, поэтому мне нужно разрешить 3-значные числа в моем регулярном выражении. Если я просто искал 3-значное число, я знаю, что могу сделать preg_match_all("/(\d{3})/", $mystring, $result);

Но в данном случае я хочу, чтобы исключить 3-значных чисел, то есть. регулярное выражение должно указывать «соответствовать всем, у кого есть запятая, за которой следует что-то НЕ пробел, НЕ разрыв строки, а НЕ 3-значный номер». Часть «и НЕ 3-значное число» отбросила меня; Я думал, что могу просто сделать preg_match_all("/(,[^ \r\n\"\d{3}])/", $mystring, $result);, но это, похоже, не так. Что я сделал здесь неправильно? И есть ли более простой способ выполнить этот поиск?

ответ

0

Вы можете попробовать что-то более простое, например, искать запятую, а затем незаконно количество мест?

Как ,\s{2,}

Очевидно, что это становится все более сложным, если вы бросали в NOT валидаций. Для тех, вам нужно lookarounds:

,\s(?!\d) == [запятая] [пробел] [notfollowedbynumber] (?<!\d),\s == [notprecededbynumber] [запятая] [пробел]

0

отрицательного предпросмотра, используя ,(?![ \r\n\"]|\d{3})

Смежные вопросы