【问题标题】: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 并获取所有 &lt;a&gt;,它更快),所以 preg_match() 解决方案对我来说是最好的,而不是的strpos。 谢谢你的帮助 !

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-24
        • 2017-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-16
        • 1970-01-01
        相关资源
        最近更新 更多