Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP正则表达式中的否定断言_Php_Regex - Fatal编程技术网

PHP正则表达式中的否定断言

PHP正则表达式中的否定断言,php,regex,Php,Regex,我试图以http://www.test.com/username/,但不是以http://www.test.com/username/ANY_VALID_URL_PART。我知道,但失败了 内容如下: <a href="http://www.test.com/username1/show" http://www.test.com/username2/ http://www.test.com/username3 target="_blank"> 但结果是: Array ( [0] =

我试图以
http://www.test.com/username/
,但不是以
http://www.test.com/username/ANY_VALID_URL_PART
。我知道,但失败了

内容如下:

<a href="http://www.test.com/username1/show" http://www.test.com/username2/ http://www.test.com/username3 target="_blank">
但结果是:

Array
(
[0] => Array
    (
        [0] => http://www.test.com/username1
        [1] => http://www.test.com/username2
        [2] => http://www.test.com/username3
    )

[1] => Array
    (
        [0] => http://www.test.com
        [1] => http://www.test.com
        [2] => http://www.test.com
    )

[2] => Array
    (
        [0] => username1
        [1] => username2
        [2] => username3
    )

)
有人能告诉我为什么
(?)不工作,以及如何修复它吗


即使我只能选择一个答案,我还是非常感谢大家的帮助!!!

而不是你应该使用的消极落后

注意:您还需要在正则表达式中转义点
。如果您只想获取url的用户名部分,您可以使用一个捕获组,这里不需要三个


而不是消极落后你应该使用

注意:您还需要在正则表达式中转义点
。如果您只想获取url的用户名部分,您可以使用一个捕获组,这里不需要三个


现在还不完全清楚这是否是您想要的,但是为什么不在末尾添加
/$
以防止匹配更长的字符串呢?Hello@Brad!实际上我不想在这里使用用户名1。有没有办法排除它?此外,如果我在末尾添加
$
,结果将变为空。我想您正在查找
(?:
?还不完全清楚这是否是您想要的,但为什么不在末尾添加
/$
,以防止匹配更长的字符串?Hello@Brad!实际上我不想在这里使用用户名1。有没有办法排除它?此外,如果我在末尾添加
$
,结果将变为空。我想您正在查找
(?:
?是的,我忘了逃出Dotsorry,我对你的
\b
标记感到困惑。你重新排除了
http://www.test.com/username6/>
你能给我更多的帮助和指导吗?谢谢!通过你的回复,我可以让它工作了:但是你能给我简短的解释或关于
-b
.T的参考吗hanks!是的
\b
是a。单词边界不使用任何字符。它声明一边有单词字符,另一边没有。我正在
中查找用户名部分http://www.test.com/username/
,它没有任何尾随URL部分。(如
http://www.test.com/username/Hello
)你的代码现在可以工作了!THX!是的,我忘了逃出Dotsorry,我对你的
\b
标记感到困惑。你重新排除了
http://www.test.com/username6/>
您能给我更多的帮助和指导吗?谢谢!有了您的RE,我可以让它工作了:但是您能给我简短的解释或关于
-b
。谢谢!是的
\b
是a。单词边界不使用任何字符。它声明一边有单词字符,另一边没有。我正在
中查找用户名部分http://www.test.com/username/
,它没有任何尾部URL部分。(如
http://www.test.com/username/Hello
)您的代码现在可以工作了!谢谢!
Array
(
[0] => Array
    (
        [0] => http://www.test.com/username1
        [1] => http://www.test.com/username2
        [2] => http://www.test.com/username3
    )

[1] => Array
    (
        [0] => http://www.test.com
        [1] => http://www.test.com
        [2] => http://www.test.com
    )

[2] => Array
    (
        [0] => username1
        [1] => username2
        [2] => username3
    )

)
preg_match_all('~https?://www\.test\.com/([a-z0-9]+\b)(?!/[\w?&=-])~i', $str, $matches);
print_r($matches[1]);