Предположим, что следующие строки:
aaa bbb ccc bbb aaa ccc
Я хочу aaa если он не находится в начале строки. Я пытаюсь отрицать это, делая что-то вроде этого:
[^^]aaa
Но я не думаю, что это правильно. Использование preg_replace .
Вы можете использовать внешний вид, чтобы убедиться, что это не в начале. (?<!^)aaa
Если вы не хотите использовать lookbehind, используйте это регулярное выражение:
/.(aaa)/
И используйте matched group # 1 .
Поскольку я пришел сюда через поиск Google и был заинтересован в решении, которое не использует lookbehind , вот мои 2 цента.
Шаблон [^^]aaa соответствует символу, отличному от ^ а затем 3 a любом месте внутри строки. [^...] является отрицательным символьным классом, где ^ не считается специальным символом. Обратите внимание на первое ^ , которое сразу после [ является особенным, поскольку оно обозначает отрицание, а второе – буквальный символ каретки.
Таким образом, a ^ не может быть внутри [...] чтобы обозначить начало строки.
Решение состоит в том, чтобы использовать любые негативные образы, эти два будут работать одинаково хорошо:
(?<!^)aaa
и взгляд:
(?!^)aaa
Почему тоже смотрится? Lookarounds – это утверждения с нулевой шириной, а анкеры также имеют нулевую ширину – они не потребляют текст. Буквально, (?<!^) Проверяет, нет ли начала позиции строки сразу слева от текущего местоположения, и (?!^) Проверяет, нет ли начала позиции строки сразу справа от текущего местоположения , Те же места проверяются, поэтому обе работают хорошо.