簡體   English   中英

PHP正則表達式中的否定斷言

[英]The negative assertions in PHP regular expression

我試圖找到在表單中的所有用戶名http://www.test.com/username/ ,但不是在形式http://www.test.com/username/ANY_VALID_URL_PART 在PHP中嘗試了否定性斷言 ,但失敗了。

將內容設為:

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

我想在http://www.test.com/username/http://www.test.com/username獲得用戶名部分,但我也想忽略http://www.test.com/username/show的用戶名http://www.test.com/username/show 我嘗試了以下方法:

preg_match_all("/(https?:\/\/www.test.com)\/([A-Za-z]+[A-Za-z0-9]+)(?<!(\/[A-Za-z0-9&?_-]))/i", $input_lines, $output_array);

但是結果是:

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
    )

)

誰能告訴我為什么(?<!(\\/[A-Za-z0-9&?_-]))不起作用,以及如何解決?

甚至以為我只能選擇一個答案,非常感謝您的幫助!!!

而不是使用負向后視,您應該使用負向后視

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

注意:您需要轉義點. 在您的正則表達式中也是如此。 而且,如果您只想獲取url的用戶名部分,則可以使用一個捕獲組,這里不需要三個。

現場演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM