Как сопоставить шаблон регулярного выражения только в одной строке?

1

У меня есть следующее выражение: regex и sample:

http://regex101.com/r/xK9dE3

Как вы видите, это соответствует первому "лету". Я хочу, чтобы шаблон совпал на одной строке (второй "yo") с "cut me".

Как я могу убедиться, что соответствие регулярного выражения находится только в одной строке?

Вывод:

Hi

Ожидаемый результат (это то, что я действительно хочу):

Hi

yo keep this here

Keep this here
Теги:

2 ответа

1
Лучший ответ

Удалите флаг s или DOTALL и измените ваше регулярное выражение на следующее:

^.*?((\yo\b.*?(cut me:)[\s\S]*))

С DOTALL флагом DOTALL . будет соответствовать символам новых строки, так что ваш матч может охватывать несколько линий, включая линию до yo или между yo и cut me. Удалив этот флаг, вы можете убедиться, что вы только сопоставляете строку с yo и cut me, а затем измените .* В конце на [\s\S]* который будет соответствовать любому символу, включая символы новой строки, чтобы вы могли соответствовать конец строки.

http://regex101.com/r/sX2kL0

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

  • 0
    круто ... это, по сути, то, чего я хочу достичь, потому что как только я сопоставляю этот шаблон (сопоставлять лишние вещи), я делаю замену (избыточное "") в сопоставлении с образцом, что является избытком, который по существу удерживает вещи выше ... Спасибо!
1

Вы можете использовать это регулярное выражение с флагом s (DOTALL) regex:

^.*?(?=yo\b[^\n]*cut me:)

Демо-версия: http://regex101.com/r/oV3eP7

yo\b[^\n]*cut me: lookahead pattern, который гарантирует, что yo с границей слова и cut me: совпадают в одной строке.

  • 0
    классно! Спасибо!
  • 0
    @JaJ: Что-то не так с ответом?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню