質問

この正規表現を作成しました

(www|http://)[^ ]+

すべてに一致する http://... または www.... しかし、機能するpreg_replaceの作り方がわかりません、試してみました

preg_replace('/((www|http://)[^ ]+)/', '<a href="\1">\1</a>', $str);

しかし、それは機能せず、結果は空の文字列です。

役に立ちましたか?

解決

区切り文字としてスラッシュを使用しているため、正規表現内のスラッシュをエスケープする必要があります。別の記号を区切り文字として使用することもできます。

// escaped
preg_replace('/((www|http:\/\/)[^ ]+)/', '<a href="\1">\1</a>', $str);

// another delimiter, '@'
preg_replace('@((www|http://)[^ ]+)@', '<a href="\1">\1</a>', $str);

他のヒント

//とします。http://他のユーザーが提供する正規表現コードを使用する場合は、

、それはHTTPの両方で動作しますので、ケース・不感性を有効にするには、「i」のフラグを追加してください。例えば、混乱のコードを使用します:

preg_replace('!(www|http://[^ ]+)!i', '<a href="\1">\1</a>', $str);
preg_replace('!((?:www|http://)[^ ]+)!', '<a href="\1">\1</a>', $str);

あなたがうまく動作しませんあなたのパターン内部/を持つ、あなたのパターンの区切り文字として/を使用しています。私は、パターンの区切り文字として!を使用して、これを解決していますが、代わりにバックスラッシュを使用してスラッシュをエスケープできます。

私はまた、あなたが2つの括弧のキャプチャをしていた理由はどのような理由を見ていないので、私はそれらのいずれかを取り外します。

あなたの状況におけるトラブルの一部は、あなたが抑え警告で実行しているということです。あなたがerror_reporting(E_ALL)ていた場合、あなたはPHPがあなたの正規表現であなたの区切り文字の問題について、生成しようとしているメッセージを見ていると思います。

文字列の代わりにスペースを改行で区切って中に含まれる複数のURLがある場合は、

は、\ Sを使用する必要があります。

preg_replace('/((www|http:\/\/)\S+)/', '<a href="$1">$1</a>', $val);
scroll top