【发布时间】:2023-03-03 23:35:01
【问题描述】:
我需要一个正则表达式,它可以匹配以下字符串中“%”标记内的内容:
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
所以在第二次通话中我没有得到匹配。希望这会有所帮助。
【问题讨论】:
-
您想将
yada yada yada% bla bla %yada #1 yada或yada yada yada和yada #1 yada与第二个测试匹配吗? -
您想要一个提取的子字符串,还是多个?考虑
X%A%B%C%Y。您是想要拉出三个内部字符串A、B、C,还是只想拉出A%B%C?从您对其中一个答案的评论来看,您非常希望有三场比赛,以便您可以对每场比赛进行某种s/foo/bar/g魔术。 -
@MaPePeR 第一次调用我的函数(在第二个示例中)它必须匹配“yada yada yada”。该函数会将“%”标记替换为:
<a href="link">yada yada yada</a>第二次我调用它时,它应该对“yada #1 yada”执行相同的操作。因此,当我第二次调用它时,它会将最后两个“%”剩余标记替换为:<a href="another link">yada #1 yada</a> -
@Kapn0batai 编辑您的问题以添加代码的相关部分。
-
您是否正在使用 Javascript 修改 html 文档?如果是这种情况,除了(未)损坏的正则表达式之外,您可能还有其他问题。通过将元素插入
innerHTML,innerHTML将不再包含该字符串。
标签: php regex parsing html-parsing substitution