我想在PHP中使用regex和preg_match_all()解析html文档以获取twitter配置文件的链接。 twitter链接采用以下形式:
http(s)://twitter.com/#!/twitter_name
我只想抓取纯粹属于个人资料页面的链接(例如,在twitter_name之后没有任何内容)。
我想同时处理http和https(因为这在这些链接中很常见)。
我还想处理//www.twitter.com和//twitter.com(也很常见)。
我应该如何构建我的正则表达式?
答案 0 :(得分:2)
如下:
(https?:)*\/\/(www.)*twitter.com\/#!/([A-Za-z0-9_]*)
我不确定Twitter句柄中所有字符的有效性,但我假设0-9,字母和下划线。
可能最好在不区分大小写的模式下运行它,并且除去A-Z
。
答案 1 :(得分:2)
大多数一般正则表达式(停在“/”或空格处):
(https?:)?\/\/(www\.)?twitter.com\/(#!\/)?([^\/ ].)+
答案 2 :(得分:1)
尝试
preg_match_all('|https?://(?:www\.)?twitter.com/#!/[a-z0-9_]+|im', $text, $matched)
不确切知道twitter用户名中的字符是什么,所以我假设[a-z0-9 _] +。 $ matched [1]应该是用户名。
答案 3 :(得分:1)
尝试以下方法:
preg_match_all('~https?://(?:www\.)?twitter.com/#!/([a-z0-9_]+)~im', $html, $matches);
$matches[1]
包含匹配的用户名。
修改:有关用户名中可显示哪些字符的详细信息,请参阅this answer,有关更多常规信息,请参阅this Twitter Engineering page。