正则表达式,只替换第一次出现的 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
已在记事本++中测试
我有几个文件中有双 <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
已在记事本++中测试