Regex 捕获指定的正则表达式,具有特定结束字符串的除外

Regex 捕获指定的正则表达式,具有特定结束字符串的除外,regex,Regex,输入字符串: <ce:textbox-head><ce:title id="ti0015">Close-up: The front of the box</ce:title></ce:textbox-head><ce:title id="ti0010">Safety Lessons From Two Events Without Core Damage</ce:title> 特写:盒

输入字符串:

<ce:textbox-head><ce:title id="ti0015">Close-up: The front of the box</ce:title></ce:textbox-head><ce:title id="ti0010">Safety Lessons From Two Events Without Core Damage</ce:title>
特写:盒子前部从两次没有核心损坏的事件中吸取了安全教训
正则表达式不工作:

<ce:title(.*?)>(.*?)</ce:title>^((?!</ce:textbox-head>).)*$
(.*)^((?!)*$
预期产出:

<ce:title id="ti0010">Safety Lessons From Two Events Without Core Damage</ce:title>
两次无堆芯损坏事件的安全教训
这就是你想要的吗? 这就是你想要的吗?
(?因为您不打算将行与
完全匹配,所以不需要使用标记。相反,您可以使用负前瞻,如下所示:

(?!.*</ce:textbox-head>)(<ce:title(?:.*?)>.*?</ce:title>)
(?!*)(*?)

说明:

  • (?!.*)
    反向前瞻,以防止将任何行与行中不需要的模式匹配
  • (.*)
    预期的匹配组,与您编写的代码类似。放入捕获组

请注意,在您的尝试中,使用类似
(?!))*
的标记构造,它不会阻止您匹配同一行中的任何子字符串。它只是确保匹配(如果有)不包括此模式(但仍将匹配不具有此模式的部分)。因此,输入中的第一行仍将意外匹配。

由于您不打算将所有行与
进行匹配,因此不需要使用标记。相反,您可以使用负前瞻,如下所示:

(?!.*</ce:textbox-head>)(<ce:title(?:.*?)>.*?</ce:title>)
(?!*)(*?)

说明:

  • (?!.*)
    反向前瞻,以防止将任何行与行中不需要的模式匹配
  • (.*)
    预期的匹配组,与您编写的代码类似。放入捕获组

请注意,在尝试中使用类似
(?!)*
的标记构造,它不会阻止您匹配同一行中的任何子字符串。它只是确保匹配(如果有)不包括此模式(但仍将匹配不具有此模式的零件)。因此,您输入的第一行仍将意外匹配。

感谢您的努力,请您在代码标签中介绍您的代码和示例,以便更好地理解它,谢谢。这是您想要的吗?是的。谢谢@tshionoy在我下面建议的模式中,您不需要将
替换为
[^>]
[^]
。不管怎样,只要你喜欢任何选项。如果你允许在
中嵌套标记,那么主要的区别很重要。谢谢你展示了你的努力,请你在代码标记中涵盖你的代码和示例,以便更好地理解它,谢谢。这是你想要的吗?是的。谢谢@tshionoy在我下面建议的模式中,您不需要将
替换为
[^>]
[^]
。不管怎样,只要您喜欢任何选项。如果允许捕获
(.?)中的嵌套标记,则主要区别很重要。必须捕获任何字符(.?)必须捕获任何字符