【问题标题】:preg replace with multiple curly brackets [duplicate]preg 用多个大括号替换 [重复]
【发布时间】:2020-06-18 17:30:55
【问题描述】:

我想用 }string%{ 替换 }string{ 之间的内容

我正在添加 % 来编辑搜索查询。

字符串示例 - {a26f089ed1530be8648027b493a21bfd44c5fb15d632afc8f1c539c7c3da88a4}出{a26f089ed1530be8648027b493a21bfd44c5fb15d632afc8f1c539c7c3da88a4}>p

这对花括号之间的2个值每次都会改变{rAndows2ring}

我尝试了很多变化,最接近的是;

$where = preg_replace("/\}([^}]+)\{/", "}$1%{", $where);

但这会在第一个 { 处返回一个额外的 %。

%{212190298d692385253efb2a1062006ddf3ea008e3cdc2f8b8f11884ec863202}out%{212190298d692385253efb2a1062006ddf3ea008e3cdc2f8b8f11884ec863202}

提前致谢!

【问题讨论】:

  • It does not,它按预期工作。显示代码。
  • 您可以将{ 添加到否定字符类\}([^{}]+)\{,以确保}{ 之间没有{}
  • odd - 会检查但这是代码及其输出。

标签: regex preg-replace special-characters


【解决方案1】:

这行得通:

<?php

$oldString = '{a26f089ed1530be8648027b493a21bfd44c5fb15d632afc8f1c539c7c3da88a4}out{a26f089ed1530be8648027b493a21bfd44c5fb15d632afc8f1c539c7c3da88a4}';
echo '<p>oldString: ';
var_dump($oldString);
echo '</p>';


$newString = preg_replace('#(\{[\d\w]+\})([\d\w]+)(\{[\d\w]+\})#', '$1$2%$3', $oldString);

echo '<p>newString: ';
var_dump($newString);
echo '</p>';

?>
  • (\{[\d\w]+\}) 捕获用大括号括起来的第一个数字字符串和单词字符。
  • ([\d\w]+) 捕获 'out',或介于两者之间的任何其他数字字符串和单词字符
  • (\{[\d\w]+\}) 同上

【讨论】:

  • OP 代码运行良好,原始的正则表达式比您建议的更简洁和更好。
  • 如果它把另一个'%'放在他不想要的地方,它根本不起作用。
猜你喜欢
  • 2017-11-17
  • 1970-01-01
  • 1970-01-01
  • 2019-12-03
  • 1970-01-01
  • 2019-05-22
  • 1970-01-01
  • 1970-01-01
  • 2017-01-05
相关资源
最近更新 更多