Когда я сопоставляю несколько негативных взглядов или несколько негативных взглядов сзади, я обнаруживаю, что поведение Р. отличается.Для иллюстрации предположим, что я хочу сопоставить все, что следует за z, кроме a, d, bd или bcd в str.Работает следующее регулярное выражение:
grep("z(?!a|(bc?)?d)",str,perl=TRUE)
Далее я хочу сопоставить все, что предшествует z, кроме a, b, bd или bcd в str.Регулярное выражение, построенное подобным образом, терпит неудачу (недопустимое регулярное выражение):
grep("(?<!a|b(c?d)?)z",str,perl=TRUE)
Следовательно, я должен использовать довольно громоздкое регулярное выражение:
grep("(?<!a|b)(?<!bd)(?<!bcd)z",str,perl=TRUE)
Кажется, что в случае (отрицательного) посмотрим, если я хочу использовать оператор «или» |, то подвыражения должны быть одинаковой длины, но в случае (отрицательного) заглядывания такого ограничения нет.
Я что-то здесь пропускаю?Моя проблема в том, что у меня есть много образцов, которые можно сопоставить в негативном случае.Использование |а также ?существенно упростит регулярное выражение, но по причинам, изложенным выше, я не могу их использовать.Как решить эту проблему?