Я работаю над «Вики-игрой» с помощью PHP, и я хотел бы сопоставить все ссылки в строке, начинающейся с /wiki/something
, например /wiki/Chiffrement_RSA
или /wiki/OSS_117_:_Le_Caire,_nid_d%27espions
. Я знаю лишь несколько вещей о REGEX, так что я структурирован. Если бы кто-то мог мне помочь, было бы хорошо. А пока у меня есть только _4 _... Спасибо за вашу помощь!
Выбор определенных ссылок с помощью REGEX
Ответы (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
}
?>
Я не так часто использую чистое регулярное выражение, если это не очень необходимо.
Вы можете уменьшить размер выходного массива на 50%, используя \K
в своем шаблоне. Это устраняет необходимость в группе захвата и помещает желаемые подстроки в массив «полных строк».
Шаблон:
\/wiki\/\K[^ ]+
\K
говорит: "Начните полное совпадение строк отсюда". Это означает, что память не тратится. Возможно, это небольшое улучшение, но я считаю, что это лучшая практика, и я думаю, что больше людей должны его использовать.
Наконец, я выбрал ответ Cody.code с этим регулярным выражением: \/wiki\/([^ ]+)
. Я буду использовать этот код, чтобы проверить, сохраняю ли я ссылку в массиве или нет (я проанализирую свой html с помощью DOMDocument, чтобы получить все <a>
, это быстрее), поэтому решение preg_match()
для меня лучше, чем strpos. Спасибо за вашу помощь !