Regex 先发制人 这是一个测验练习

Regex 先发制人 这是一个测验练习,regex,Regex,仅将行与文本开始匹配,除非文本结束在该行之前(结束可能在字符串中,也可能不在字符串中)。匹配:ssstarttt行和不匹配line\u end start 我试过密码 (?:.*?\s?start(?<!$).*\b|(?<!.)start|^\w+start) (?:.*\s?开始(?)? 结果返回 测试23/25:它不应该与结束-开始匹配 正则表达式 应匹配 ssstarttt线路 埃斯塔特 开始 aa开始结束开始 不应匹配 线路结束-开始 结束-开始-结束-开始如果文本开始应

仅将行与文本开始匹配,除非文本结束在该行之前(结束可能在字符串中,也可能不在字符串中)。匹配:
ssstarttt行
和不匹配
line\u end start

我试过密码

(?:.*?\s?start(?<!$).*\b|(?<!.)start|^\w+start)
(?:.*\s?开始(?)?
结果返回

测试23/25:它不应该与结束-开始匹配

正则表达式

应匹配

ssstarttt线路

埃斯塔特

开始

aa开始结束开始

不应匹配

线路结束-开始


结束-开始-结束-开始

如果文本开始应该在那里,但文本结束不应该在开始之前,一个选项是使用负前瞻来断言右侧的内容不是
结束

^(?:(?!end).)*start.*
解释

  • ^
    字符串的开头
  • (?:
    非捕获组
    • (?!end)。
      断言右边的内容不是end并匹配任何字符的负向前看
  • )*
    关闭非捕获组并重复0多次
  • 开始。*
    匹配开始,后跟任意字符0+次

测试17/25:它应该匹配aaa开始-结束-开始。现在,你应该想知道是否必须将它锚定到^。如果你锚定了它,如何在前瞻中判断它是否在开始之前。尝试使你的模式从一开始就一个字符一个字符地匹配,并在遇到结束时使其失败。提示:/(?!结束)/