Regex: шаблон соответствия, если он не в начале

Предположим, что следующие строки:

aaa bbb ccc bbb aaa ccc 

Я хочу aaa если он не находится в начале строки. Я пытаюсь отрицать это, делая что-то вроде этого:

 [^^]aaa 

Но я не думаю, что это правильно. Использование preg_replace .

Solutions Collecting From Web of "Regex: шаблон соответствия, если он не в начале"

Вы можете использовать внешний вид, чтобы убедиться, что это не в начале. (?<!^)aaa

Если вы не хотите использовать lookbehind, используйте это регулярное выражение:

 /.(aaa)/ 

И используйте matched group # 1 .

Поскольку я пришел сюда через поиск Google и был заинтересован в решении, которое не использует lookbehind , вот мои 2 цента.

Шаблон [^^]aaa соответствует символу, отличному от ^ а затем 3 a любом месте внутри строки. [^...] является отрицательным символьным классом, где ^ не считается специальным символом. Обратите внимание на первое ^ , которое сразу после [ является особенным, поскольку оно обозначает отрицание, а второе – буквальный символ каретки.

Таким образом, a ^ не может быть внутри [...] чтобы обозначить начало строки.

Решение состоит в том, чтобы использовать любые негативные образы, эти два будут работать одинаково хорошо:

 (?<!^)aaa 

и взгляд:

 (?!^)aaa 

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

Это поможет найти то, что вы ищете:

(?<!^)aaa

Пример использования: http://regexr.com?34ab2