-1

我需要一个正则表达式,它可以匹配以下字符串中“%”标记内的内容:

1) 呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜

即使表格是这样的:

2) Bla bla bla %yada yada yada% bla bla %yada #1 yada%

我认为/%([^%]*)%/可以,但在第二种情况下,它与第二部分(%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

因此,在第二次通话中,我没有得到匹配。希望这可以帮助。

4

4 回答 4

1

看你的电话... 第二个参数不preg_match应该...$subject$search

此外,用于return实际返回某些东西,而不是echo.

于 2013-04-24T12:09:44.130 回答
1

%.*%

这将匹配

1) 一个 %

2) 任意数量的任意字符

3) 一个%

而且由于它会贪婪地匹配而不是懒惰地匹配,它会匹配最广泛的 %...% 它可以,而不是在第一个停止。

例如,它的惰性版本是 %.*?% (把 ? 放在 * 之后使它变得惰性)并且它会在第一个而不是最后一个 % 之后关闭。

于 2013-04-24T12:12:05.413 回答
0

试试这个表达

%[a-zA-Z0-9# ]*%

希望能帮助到你

于 2013-04-24T12:14:12.880 回答
0

/%.+?%/应该做的伎俩。
请参阅正则表达式的贪婪。
[^%]停在第一个%。但是您想包含两个%s 之间的所有字符。

于 2013-04-24T12:11:38.763 回答