1

私は文字列を持っており($stringこの例では)、次のことを実行したいと思います。

文字列を解析し、その中のすべてのURLを「実際のリンク」に変換します(オープン/クローズアンカータグを追加します)。

これを行うための最良の方法は何ですか?preg_split()文字列に含まれるリンクの配列を作成するためにを使用してみましたがstr_replace()、事後に使用して変更を加えることを考えました。ただし、このアプローチは機能していません。これは、テキストの文字列内のリンクを。で分離するのに苦労しているためですpreg_split()

$stringその中にいくつかのリンクを含めることができるので、私はこのアプローチを採用しました。リンクが何であるかを事前に正確に知っていれば、またはstr_replace()パターンマッチングを使用して作業すれば、設定されます。

要するに、私は上記のアプローチが最善の方法ではないと思います。より良い方法は何ですか?

4

3 に答える 3

3

これはまさに、preg_replace意図されたものです...

preg_replace('/your URL regex/', '<a href="$0">$0</a>', $string);

EDIT : なんてこった、「URL regex PHP」のトップ Google ヒット: http://snipplr.com/view/2371/regex-regular-expression-to-match-a-url/

# PHP Example: Automatically link URL's inside text.

$text = preg_replace('@(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)@', '<a href="$1">$1</a>', $text);

URL を完全に一般的に一致させたい場合は、非常に複雑な正規表現が必要になりますが、最も一般的な HTTP/HTTPS URL に一致させるには、上記の正規表現が機能するはずです。

于 2009-02-24T01:57:53.233 に答える
1

の目的を誤解していると思いますpreg_split()。正規表現に基づいて文字列を分割するために使用されます。たとえば、データ文字列「one1two2three3four」がある場合preg_split、「\d」の正規表現で使用でき、「one」、「two」、「three」、「four」で構成される 4 要素の配列が返されます。 "。

したがって、リンクが常に特定の文字で区切られていない限り、preg_split()は適切なツールではありません。preg_match()おそらく、返されたさまざまな一致を使用してからループしたいと思うでしょう。

編集:またはデビッドが述べたように、preg_replace()よりもさらに優れていpreg_match()ます。

于 2009-02-24T01:52:10.423 に答える
0

正規表現は、リンクがどのように表示されるか、またはどこに表示されるか (引用符内、カスタム HTML タグ内など) によって異なります。

また、入力がどこから来ているかによっても異なります。ユーザーからのものである場合は、マークダウンのような構文を使用することをお勧めします。

とにかく、http: //regexlib.com/Search.aspx?k=linksをチェックして、URI などに一致すると主張するいくつかの正規表現を確認してください。次に、次を使用します (元は David によって投稿されました)。

preg_replace('/your URL regex/', '<a href="$0">$0</a>', $string);
于 2009-02-24T02:06:39.157 に答える