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]);