我需要一个能够匹配"%"内部的正则表达式。标记在以下字符串中:
1)Bla bla bla yada yada yada%bla bla。
即使表格是这样的:
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
所以在第二次通话中,我没有得到匹配。希望这会有所帮助。
答案 0 :(得分:1)
查看您对preg_match
的来电...第二个参数应为$subject
而不是$search
...
另外,使用return
实际返回内容,而不是echo
。
答案 1 :(得分:1)
%.*%
这将匹配
1)a%
2)任意数量的任何字符
3)a%
因为它会贪婪地而不是懒惰地匹配,它将匹配最宽的%...%它可以,而不是停在第一个。
例如,懒惰的版本将是%。*?%(在*之后放置?使其变得懒惰)并且它将在第一个之后关闭,而不是最后一个%。
答案 2 :(得分:0)
/%.+?%/
应该做到这一点
看到正则表达式的贪婪。
[^%]
在第一个%
停止。但是你想要在两个%
之间包含所有字符。
答案 3 :(得分:0)
试试这个表达
%[a-zA-Z0-9# ]*%
希望有所帮助