В настоящее время я пытаюсь создать регулярное выражение, которое может соответствовать 3 числам при определенных обстоятельствах. Сейчас я пробовал разные попытки, но это не сработает с одним выражением - это либо "ложное срабатывание", либо "соответствие неправильным числам"...
Прописью: я хочу сопоставить ЛЮБЫЕ 3 цифры, которые
- Появляется в начале строки
- Появление где-то внутри строки
- (Конец строки НЕ возможен)
IF:
- Не существует другой трехзначной группы, соответствующей этому условию. (неоднозначно)
- За группой не следует буква «p» или «i».
- Группу не возглавляет "x"
В примерах (число в ()
— это то, что я хочу сопоставить):
- Это (321) пример.
- (321) также
- включая (321) // в принципе невозможно, но не помешает.
- у этого (321) есть еще одна группа с p: 122p
- у этого (321) есть еще одна группа с I: 123i
- этот x235 следует игнорировать, потому что (123) - это то, что я хочу сопоставить.
- (123) это то, что я хочу, а не x111 или 125p или 999i
- в этом 111 случае нет решения 555
(Мне нужно это как (1 число) (2 числа) - но это будет просто небольшая модификация совпадения из 3 чисел)
Моя последняя попытка выглядела так:
(?:[^x]|^)(\d{1})(\d{2})[^pi]
Однако в последнем случае это не удается. Я попытался скрыть это с помощью preg_match_all(...) === 1
, чтобы убедиться, что совпал только один результат.
Однако теперь тестовая строка типа «101 202» будет положительной, потому что первая проверка соответствует 101
(включая пробелы), а затем не соответствует 202
, из-за чего шаблон предполагает, что 101
является единственным допустимым решением, что неверно.
(?:[^x]|^)(\d{1})(\d{2})[^pi]
Есть идеи?
Примечание. Он должен работать с разными механизмами регулярных выражений, независимо от того, php, javascript, java, .net или Ook! :)
~(?<!x)\d{3}(?![pi]|$)~i
и скажите, что не так с совпадениями, которые он получает. - person HamZa   schedule 26.04.2014(?<!x)(?:(?:(\d{1})(\d{2}))(?![pi]))
. Однако в Debuggex поиск назад завершается с ошибкой компиляции, а другие тестеры Regex также не возвращают никаких совпадений, поэтому я хотел бы использовать более надежное решение, чем просмотр назад: debuggex.com/r/jUytMQhBFWo93f_V - person dognose   schedule 26.04.2014php
вводила в заблуждение (просто используя PHP в качестве тестовой системы) - извините за это. - person dognose   schedule 26.04.2014