4

見つかった eregi_replace 関数を preg_replace に変換していますが、eregi 文字列にはキーボード上のほぼすべての文字が含まれています。そこで、区切り文字として£を使用しようとしました..現在は機能していますが、非標準文字であるため問題が発生する可能性があるのだろうか?

ここにエレギがあります:

function makeLinks($text) {  
$text = eregi_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)',
'<a href="\\1">\\1</a>', $text);
$text = eregi_replace('([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_\+.~#?&//=]+)',
'\\1<a href="http://\\2">\\2</a>', $text);

    return $text;}

そしてプレグ:

function makeLinks($text) {
    $text = preg_replace('£(((f|ht){1}tp://)[-a-zA-^Z0-9@:%_\+.~#?&//=]+)£i',
    '<a href="\\1">\\1</a>', $text);
    $text = preg_replace('£([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_\+.~#?&//=]+)£i',
    '\\1<a href="http://\\2">\\2</a>', $text);

        return $text;
}
4

5 に答える 5

4

かっこを使用して、単一の文字ではなく正規表現を区切ることができます。次に例を示します。

preg_replace('(abc/def#ghi)i', ...);

それはおそらく、(まだ) あなたの表現の一部ではないあいまいな文字を見つけようとするよりも良いでしょう.

于 2011-03-05T23:34:53.240 に答える
4

£ASCII 文字ではないため、問題があります。これは Latin-1 文字セットからのもので、PHP スクリプトも 8 ビット表現を使用している場合にのみ機能します。ファイルが UTF-8 としてエンコードされている場合、£2 バイトで表されます。そしてPHPのPCREはそれを乗り越えます。(少なくとも私のバージョンはそうです。)

于 2011-03-06T00:11:03.890 に答える
2

@Chrisが指摘したように、ペアの角かっこ文字を区切り文字として使用できますが、正規表現全体で適切にバランスを取る必要があります。たとえば、'<<>'機能しませんが、機能し'<<>>'ます。()、、、またはのいずれかを使用できますが 、[]中かっこまたは角かっこをお勧めします。括弧は正規表現ではあまりにも一般的であり、山かっこは(アトミックグループ)や(後ろ向き)などのエスケープシーケンスで使用されます。{}<>(?>...)(?<=...)

しかし、私はこれについて@Bradを使用しています。正規表現に表示されるたびに、区切り文字をバックスラッシュでエスケープしてみませんか?

于 2011-03-06T00:58:11.040 に答える
2

念のため、ユニコード文字を使用できます。

\u00A3

ereg 関数と Unicode サポートに注意してください。

http://www.regular-expressions.info/php.html
http://www.regular-expressions.info/characters.html

女王万歳。

于 2011-03-05T23:36:16.477 に答える
1

データが解析されていることは、私たちよりも優れていることがわかります。正規表現に関する限り、他の ASCII 値と何ら変わりはありません。

私は尋ねなければなりませんが、伝統的なものを単にエスケープすることの何が問題なのですか? または、文字範囲を持つクラスを使用していますか?

于 2011-03-05T23:33:18.527 に答える