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

时间:2015-12-17 17:31:54

标签: regex textwrangler

我有几个文件中有两个<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 个答案:

答案 0 :(得分:3)

正则表达式:

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

替换:

\1\nappended content\n\2

说明:

  • (?s)制作了。人物匹配新线。没有这个,。字符将匹配所有字符,直到它命中新的字符。
  • (<body.*?>)找到第一个&#34;身体&#34;并捕获为组1(\ 1)。
  • (.*)查找第一个&#34; body&#34;之后的所有内容,并将其捕获为第2组(\ 2)。
  • 替换在第1组+新行中找到的所有内容+追加内容+新行+第2组

在Notepad ++中测试