2010-01-01 28 views
0

在一個phpBB論壇,memberlist.php列出了董事會的所有成員具有以下HTML:匹配用戶名使用正則表達式

<a href="profile.php?mode=viewprofile&amp;u=4">Username</a> 

其中u = 4的用戶的用戶ID和用戶名顯然是他們的用戶名。

可能有50-100個這樣的HTML代碼,我想匹配它們,所以我打算使用preg_match_all

這是我得到:

preg_match_all('/<a href="profile\.php?mode=viewprofile&amp;u=/d">(.*?)</a>/', $page, $usrname, PREG_PATTERN_ORDER); 

但它返回此錯誤:

Warning: preg_match_all() [function.preg-match-all]: Unknown modifier 'd' in C:\xampp\htdocs\index.php on line 38 

誰能告訴我在preg_match_all功能使用相匹配的用戶名正則表達式?請記住u=4部分鏈接將改變:)

乾杯。

回答

2

應使用的\d代替/d

/d被嘗試​​使用的改性劑(如/ I爲不區分大小寫)

\ d是一個字符類意味着數字0-9。

這應該工作:

preg_match_all('/<a href="profile\.php\?mode=viewprofile&amp;u=\d+">(.*?)<\/a>/', $page, $usrname, PREG_PATTERN_ORDER); 
+0

當我這樣做後,我得到一個'未知的修飾符'a''錯誤,當我這樣做時:'<\/a>'我得到一個空的二維數組返回 – Matt

+0

您還需要將正斜槓中的/ a:\/a 請注意其他海報的關於允許超過一位數字並轉義符號的意見 – mopoke

+0

作品完美,謝謝 – Matt

0

\ d是你需要什麼,而不是/ d

0

\ d而非/ d,你也想逃脫?在查詢字符串

0

使用

preg_match_all('%<a href="profile\.php\?mode=viewprofile&amp;u=\d+">(.*?)</a>%', $page, $usrname, PREG_PATTERN_ORDER); 

使用\d+代替/d(這是一個語法錯誤)的開始。 +是允許多個數字(我猜你會有超過10個用戶,是不是)?也可以跳過?,或者它意味着「零個或一個前一個字符/表達式的出現。由於您的正則表達式中有一個斜槓,因此您不能將其用作分隔符,因此我使用百分號%來代替。

+0

您錯過了''中的'/',應該是'<\/a>' –

+0

沒有。將正則表達式分隔符更改爲'%',從而使其不起作用爲了避免''''子宮頸術。 –