【问题标题】:Selecting certain links with a REGEX使用正则表达式选择某些链接
【发布时间】:2017-05-22 18:08:36
【问题描述】:
我正在用 PHP 做一个“维基游戏”,我想匹配以/wiki/something 开头的字符串中的所有链接,例如/wiki/Chiffrement_RSA 或/wiki/OSS_117_:_Le_Caire,_nid_d%27espions。我只知道一些关于 REGEX 的知识,所以我是 struct。如果有人可以帮助我,那就太好了。
当时,我只有\/wiki\/*...
感谢您的帮助!
【问题讨论】:
-
我建议使用 strpos,如下所述。但是,如果您想使用正则表达式,这将捕获第一个空格之前的所有内容,然后 \/wiki\/([^ ]+) 有效。如果您有兴趣测试正则表达式,请尝试regexr.com
标签:
php
regex
pattern-matching
【解决方案1】:
您可以通过正则表达式或strpos:
<?php
$mystring = 'abc';
$find = '/wiki/';
$statusLink = strpos($mystring, $find);
// Note our use of ===. Simply == would not work as expected
// because the position of 'a' was the 0th (first) character.
if ($statusLink === false) {
echo "Not the link that you want";
} else {
echo "You found the link";
}
//or by explode
$link = explode('/', $originalLink);
if ($link[1] == 'wiki' && isset($link[2])){
//is your link
}
?>
I don't use pure regex so much unless it's very necessary.
【解决方案2】:
您可以在模式中使用 \K 将输出数组大小减少 50%。它消除了对捕获组的需要,并将所需的子字符串放在“fullstrings”数组中。
图案:
\/wiki\/\K[^ ]+
\K 表示“从这里开始全字符串匹配”。这意味着没有内存浪费。这可能是一种微改进,但我认为这是最佳实践,我认为应该让更多人使用它。
【解决方案3】:
我最终用这个正则表达式选择了 Cody.code 的答案:\/wiki\/([^ ]+)。
我将使用此代码检查我是否在数组中保留链接(我将使用 DOMDocument 解析我的 html 并获取所有 <a>,它更快),所以 preg_match() 解决方案对我来说是最好的,而不是的strpos。
谢谢你的帮助 !