Выбор определенных ссылок с помощью REGEX

Я работаю над «Вики-игрой» с помощью PHP, и я хотел бы сопоставить все ссылки в строке, начинающейся с /wiki/something, например /wiki/Chiffrement_RSA или /wiki/OSS_117_:_Le_Caire,_nid_d%27espions. Я знаю лишь несколько вещей о REGEX, так что я структурирован. Если бы кто-то мог мне помочь, было бы хорошо. А пока у меня есть только _4 _... Спасибо за вашу помощь!


person BDeliers    schedule 22.05.2017    source источник
comment
Я бы рекомендовал использовать strpos, как описано ниже. Но если вы хотите использовать регулярное выражение, оно улавливает все до первого пробела, тогда работает \ / wiki \ / ([^] +). Если вы заинтересованы в тестировании регулярных выражений, попробуйте regexr.com.   -  person cody.codes    schedule 22.05.2017


Ответы (3)


Вы можете сделать это с помощью регулярного выражения или 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
  }
?>

Я не так часто использую чистое регулярное выражение, если это не очень необходимо.

person capcj    schedule 22.05.2017

Вы можете уменьшить размер выходного массива на 50%, используя \K в своем шаблоне. Это устраняет необходимость в группе захвата и помещает желаемые подстроки в массив «полных строк».

Шаблон:

\/wiki\/\K[^ ]+

\K говорит: "Начните полное совпадение строк отсюда". Это означает, что память не тратится. Возможно, это небольшое улучшение, но я считаю, что это лучшая практика, и я думаю, что больше людей должны его использовать.

person mickmackusa    schedule 24.05.2017

Наконец, я выбрал ответ Cody.code с этим регулярным выражением: \/wiki\/([^ ]+). Я буду использовать этот код, чтобы проверить, сохраняю ли я ссылку в массиве или нет (я проанализирую свой html с помощью DOMDocument, чтобы получить все <a>, это быстрее), поэтому решение preg_match() для меня лучше, чем strpos. Спасибо за вашу помощь !

person BDeliers    schedule 22.05.2017