-1

次の文字列の「%」マークの内側に一致する正規表現が必要です。

1) Bla bla bla %yada yada yada% bla bla.

フォームが次のような場合でも:

2) ブラ ブラ ブラ %yada yada yada% bla bla %yada #1 yada%

私はそれでいいと思った/%([^%]*)%/のですが、2 番目のケースでは 2 番目の部分 (%yada #1 yada%) とは一致せず、最初の部分だけに一致します。

「%」マークの間の部分文字列に「#1」のようなものが含まれていても、式は一致する必要があります。前もって感謝します

よろしく

function replace($search, $replace, $subject, $link)
    {
        if (preg_match('/#[1-9]/', $search) == 1 && $link == null)
        {
            echo preg_replace($search, $replace, $subject);
        }
        if (preg_match('/%[a-zA-Z0-9# ]+%/', $search) == 1 && $link != null && $replace == null)
        {
            echo preg_replace('/%[a-zA-Z0-9# ]+%/', '<a href=$link>$1</a>', $subject, 1) . '<br>';
        }
    }

$string = 'bla bla #1 bla bla %bla bla% bla #2 %bla bla #3 bla%';
$newString = replace('/%[a-zA-Z0-9# ]+%/', null, $string, 'www.google.com');
echo $newString;
preg_match('/%[a-zA-Z0-9# ]+%/', $newString)); // 0 = no match

したがって、この 2 回目の呼び出しでは一致しません。お役に立てれば。

4

4 に答える 4

1

... への呼び出しを参照してくださいpreg_match。2 番目の引数は...であってはなり$subjectません。$search

また、 ではreturnなく、実際に何かを返すために使用しechoます。

于 2013-04-24T12:09:44.130 に答える
1

%.*%

これは一致します

1) %

2) 任意の数の任意の文字

3) %

そして、遅延ではなく貪欲に一致するため、最初で停止するのではなく、可能な限り広い %...% に一致します。

たとえば、これの遅延バージョンは %.*?% (* の後に ? を置くと遅延になります) になり、最後の % ではなく、最初の後に閉じます。

于 2013-04-24T12:12:05.413 に答える
0

/%.+?%/トリックを行う必要があります。
正規表現の貪欲さを参照してください。
[^%]で止まり%ます。しかし、2 つの の間のすべての文字を含めたいとします%

于 2013-04-24T12:11:38.763 に答える