正则表达式,只替换第一次出现的 HTML 标签

Regular Expression, only replace first occurrence of HTML tag

我有几个文件中有双 <body> 标签(有意或无意)。我正在查找 <body> 标记的第一次出现 only 并将其附加额外的 HTML 代码。但是第二次出现不应该受到影响。我正在使用 TextWrangler。我现在使用的正则表达式替换了两次出现而不仅仅是第一次出现。

文本:

<body someattribute=...>
existing content
<body onUnload=...>

我正在使用的正则表达式:

Find: (\<body.*\>)

Replace with: 

\n
appended HTML code

当前结果:

<body someattribute=...>
appended HTML code
existing content
<body onUnload=...>
appended HTML code

所以它添加了我的附加代码两次。我只想让它发生在第一个 <body...> 上。

正则表达式:

(?s)(<body.*?>)(.*)

替换:

\nappended content\n

解释:

  • (?s) 使 .字符匹配新行。没有这个,.字符将匹配所有字符,直到遇到换行符。
  • (<body.*?>) 找到第一个 "body" 并捕获为第 1 组 (\1)。
  • (.*) 查找第一个 "body" 之后的所有内容,并捕获为第 2 组 (\2)。
  • 将找到的所有内容替换为第 1 组 +新行+附加内容+新行+组2

已在记事本++中测试