正则表达式 - 反向引用以匹配完全匹配的第一个匹配项
Regular expression - back reference to match exact first match
Objective
将后续的强元素和强调元素合并为一个元素。取下面的字符串:
This is a <strong>test</strong><strong>string</strong>.
我需要做的是用一个标签替换两个强标签。上面应该变成:
This is a <strong>teststring</strong>.
到目前为止,我有以下正则表达式可以满足这个 objective:
(?<values>(\<(?<tag>emphasis|strong)\>([^\<]+)\<\/\k<tag>\>){2,}?)
问题
取下面的测试字符串:
This is <emphasis>a</emphasis><strong>b</strong>.
它匹配第一个强调标签和最后一个强标签。但是,这不是所需的行为。我需要的是正则表达式匹配强或强调,然后反向引用 (\k<tag>
) 匹配相同的元素(强或强调)。上面的示例将导致匹配,但它不应该因为强调和强标记都没有重复。
解决这个问题的一种方法是首先 运行 一个仅用于强调的表达式,然后另一个仅用于强调。然而,这将导致更多的维护、额外的测试等,因此是不可取的。
感谢您提供的任何帮助。
在我看来,您真正想要做的是消除任何彼此相邻的结束和开始标记。
在此:
This is a <strong>test</strong><strong>string</strong>.
您不想将第一个标签的内容与第二个标签的内容结合起来。您只想去掉中间的 </strong><strong>
。
所以做一些像
s/<\/(\w+)><>//;
如果您想将其限制为某些标签,请执行以下操作:
s/<\/(strong|emphasis)><>//;
(您没有指定您使用的语言,所以我使用 sed
替换。)
Objective
将后续的强元素和强调元素合并为一个元素。取下面的字符串:
This is a <strong>test</strong><strong>string</strong>.
我需要做的是用一个标签替换两个强标签。上面应该变成:
This is a <strong>teststring</strong>.
到目前为止,我有以下正则表达式可以满足这个 objective:
(?<values>(\<(?<tag>emphasis|strong)\>([^\<]+)\<\/\k<tag>\>){2,}?)
问题
取下面的测试字符串:
This is <emphasis>a</emphasis><strong>b</strong>.
它匹配第一个强调标签和最后一个强标签。但是,这不是所需的行为。我需要的是正则表达式匹配强或强调,然后反向引用 (\k<tag>
) 匹配相同的元素(强或强调)。上面的示例将导致匹配,但它不应该因为强调和强标记都没有重复。
解决这个问题的一种方法是首先 运行 一个仅用于强调的表达式,然后另一个仅用于强调。然而,这将导致更多的维护、额外的测试等,因此是不可取的。
感谢您提供的任何帮助。
在我看来,您真正想要做的是消除任何彼此相邻的结束和开始标记。
在此:
This is a <strong>test</strong><strong>string</strong>.
您不想将第一个标签的内容与第二个标签的内容结合起来。您只想去掉中间的 </strong><strong>
。
所以做一些像
s/<\/(\w+)><>//;
如果您想将其限制为某些标签,请执行以下操作:
s/<\/(strong|emphasis)><>//;
(您没有指定您使用的语言,所以我使用 sed
替换。)