2017-05-22 3 views
0

私はPHPで「Wiki Game」をやっています。/wiki/somethingで始まる文字列のすべてのリンクを一致させたいと考えています。たとえば、/wiki/Chiffrement_RSAまたは/wiki/OSS_117_:_Le_Caire,_nid_d%27espionsです。私はREGEXについてのいくつかのthigsを知っているので、私は構造体です。もし誰かが私を助けることができたら、それはいいだろう。 時間のために、私はちょうど持っている\/wiki\/* ... あなたの助けに感謝!REGEXで特定のリンクを選択する

+1

strposを以下のように使用することをお勧めします。しかし、正規表現を使いたい場合、これは最初のスペースまですべてをキャッチし、次に\/wiki \ /([^] +)が機能します。正規表現のテストに興味がある場合は、http://regexr.comを試してみてください。 –

答えて

0

。 このコードを使用して、配列にリンクを保持するかどうかを確認します(DOMDocumentでHTMLを解析して、すべて<a>を取得します)ので、strposの代わりにpreg_match()ソリューションが最適です。 ご協力いただきありがとうございます!

2

あなたは正規表現またはstrposにより行うことができます:\/wiki\/([^ ]+):私は最終的に、この正規表現でCody.codeの答えを選んだ

<?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.

1

パターン内で\Kを使用すると、出力配列のサイズを50%減らすことができます。これは、キャプチャグループの必要性を排除し、 "fullstrings"配列に必要な部分文字列を配置します。

パターン:

\/wiki\/\K[^ ]+ 

\Kは "ここからfullstringの試合を開始" と言います。これはメモリの無駄を意味しません。それは微調整かもしれませんが、私はそれがベストプラクティスであると信じており、より多くの人々がそれを使用すべきだと思います。

関連する問題