Регулярное выражение, только заменить первое вхождение тега HTML
У меня есть несколько файлов, которые имеют двойной <body>
теги в них (либо нарочно, либо случайно). Я ищу, чтобы найти первое вхождение только из <body>
пометить и добавить его с дополнительным кодом HTML. Но второе появление не должно быть затронуто. Я использую TextWrangler. Регулярное выражение, которое я использую сейчас, заменяет оба случая, а не только первое.
Текст:
<body someattribute=...>
existing content
<body onUnload=...>
RegEx я использую:
Find: (\<body.*\>)
Replace with:
\n\1
appended HTML code
Текущий результат:
<body someattribute=...>
appended HTML code
existing content
<body onUnload=...>
appended HTML code
Поэтому он добавляет мой добавленный код дважды. Я просто хочу, чтобы это случилось с первым <body...>
только.
1 ответ
Решение
Regex:
(?s)(<body.*?>)(.*)
Заменить:
\1\nappended content\n\2
Объяснение:
(?s)
делает. персонаж соответствует новым строкам. Без этого. персонаж будет соответствовать всем персонажам, пока не достигнет новой строки символа.(<body.*?>)
Находит первое "тело" и захватывает как группу 1 (\1).(.*)
Находит все после первого "тела" и фиксирует как группу 2 (\2).- Заменяет все, что было найдено с группой 1 + новая строка + добавленный контент + новая строка + группа 2
Протестировано в Notepad++