Предположим, что следующие строки:
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 – это утверждения с нулевой шириной, а анкеры также имеют нулевую ширину – они не потребляют текст. Буквально, (?<!^)
Проверяет, нет ли начала позиции строки сразу слева от текущего местоположения, и (?!^)
Проверяет, нет ли начала позиции строки сразу справа от текущего местоположения , Те же места проверяются, поэтому обе работают хорошо.