0

在 phpBB 论坛上,memberlist.php 使用以下 HTML 列出了董事会的所有成员:

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

其中 u=4 是用户的 UserID,而 Username 显然是他们的用户名。

可能有 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链接的一部分会改变:)

干杯。

4

4 回答 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);
于 2010-01-01T20:52:12.710 回答
0

\d 是你需要的,而不是 /d

于 2010-01-01T20:53:02.987 回答
0

\d 而不是 /d,您还想逃避 ? 在查询字符串的开头

于 2010-01-01T20:56:27.287 回答
0

采用

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

使用\d+代替/d(这是一个语法错误)。是+允许超过一位数(我猜你会有超过 10 个用户,不是吗)?也转义?, 或者它的意思是“前一个字符/表达式出现零次或一次。由于你的正则表达式中有一个斜杠,你不能用它作为分隔符,所以我用百分号%代替。

于 2010-01-01T21:01:12.643 回答