捕获组PHP的正则表达式问题

时间:2016-05-06 18:07:43

标签: php regex

我一直在寻找一段时间,并且找不到我想要的东西,或者我只是不知道我在寻找什么......

我有一种情况,我希望捕获和表达式括在括号中,括号是1到5个字符长的字母字符。这并不困难。接下来我想从搜索中排除确切的字符串(AP)。

我正在使用regex101,我似乎在我想要获得的字符串(或者它之前的空格)上获得匹配但是匹配仅返回''''而不是我想要的完整(EXC)。这是我目前的正则表达式:

import turtle

previousMovement = ""
wn = turtle.Screen()
wn.bgcolor("black")

player = turtle.Turtle()
player.color("white")
player.shape("triangle")
player.pencolor("red")

speed = 1

def left():
    global previousMovement
    if previousMovement == "left":
        player.forward(speed)
        previousMovement = "left"
    else:
        player.head(90)
        player.forward(speed)
        previousMovement = "left"

def right():
    global previousMovement
    if previousMovement == "right":
        player.forward(speed)
        previousMovement = "right"
    else:
        player.head(270)
        player.forward(speed)
        previousMovement = "right"


turtle.listen()
turtle.onkey(left, "a")
turtle.onkey(right, "d")

正确方向的任何建议或指示;如有必要,我会提供更多信息。

1 个答案:

答案 0 :(得分:1)

以下是您首次使用的正则表达式和正常运行的正则表达式(添加空格)的比较:

/((?= \(\D{1,5}\) )) (?:  .(?!AP ))/gism
/((     \D{1,5}   )) (?<!  (  AP ))/gism

当第一个模式位于不以ap开头的非数字形式时,它将与左括号匹配。看看周围的人物不匹配,请记住。 (点是唯一没有环顾四周的角色。)

另一种模式删除了文字括号:\(\)。它还删除了前瞻?=,以便您实际捕获某些内容。正则表达式的最后一部分是背后的负面看法。在这种情况下,它所做的只是阻止模式匹配p当它匹配的事物在ap结束时。

然而,我无法解释为什么第二种模式有这么多不必要的括号。这相当于:

/(\D{1,5})(?<!AP)/gism