Regex 在向前看之后捕获文本

Regex 在向前看之后捕获文本,regex,Regex,我有一个文本,它是一些文本,后跟或路径,最后是一些偏执的东西。我想捕获模式1和模式2(开头有..或/): 有解决方法吗?在您的正则表达式中,\.匹配两个点,但不捕获它们后面的/,因此,它是。此外,在捕获组中保持积极的前瞻性是没有意义的,因为它会在结果中创建不必要的组,所以您可以将(\.\.\.\.\.\/)移动到消费模式部分 你可以用 (.+?)(<null>| (?:\.\.\/|\/))(.*?)(?= \() (.+?)(|(?:\.\.\.\/|\/)(.*)(=\()

我有一个文本,它是一些文本,后跟
或路径,最后是一些偏执的东西。我想捕获模式1和模式2(开头有..或/):


有解决方法吗?

在您的正则表达式中,
\.
匹配两个点,但不捕获它们后面的
/
,因此,它是。此外,在捕获组中保持积极的前瞻性是没有意义的,因为它会在结果中创建不必要的组,所以您可以将
(\.\.\.\.\.\/)
移动到消费模式部分

你可以用

(.+?)(<null>| (?:\.\.\/|\/))(.*?)(?= \()
(.+?)(|(?:\.\.\.\/|\/)(.*)(=\()

模式匹配:

  • (.+?)
    -(第1组)除换行符以外的一个或多个任意字符,尽可能少,直到第一次出现
  • (|(?:\.\/\.\/\/)
    -(第2组)
    或后跟
    ./
    /
    的空格
  • (.*)(=\()
    -(第3组)零个或多个字符,但换行符应尽可能少,直到第一次出现后跟
    )的空格

试试。@Wiktor:谢谢,它很有效。如果你有一点时间,你能解释一下我的表达式有什么问题吗?还有什么问题吗?:它是你的解决方案吗?在我看来,它不像是一个预兆。它不是一个预兆,它是一个非捕获组。我想重点是
/
,对吗?它只是与两个点交替不匹配在lookahead中捕获组内的tive分支(我认为这个lookahead是多余的,因此,我只是将内容移动到消费模式)。
(.+)(?=(<null>|( \.\.| \/)))(.+)(.*)(?= \()
pthread_create
 /
 /
(.+?)(<null>| (?:\.\.\/|\/))(.*?)(?= \()