我需要从用户提供的输入中删除 ' 和 " (单引号和双引号),但前提是它位于左括号和右括号 [ ] 内...我不想从字符串中删除任何其他内容。
所以这:
[字体大小=“10”]
需要更改为
[字体大小=10]
但是这个:
[font size=10]牛说“哞”[/font]
不会剥夺任何东西。
这个:
[font size="10"]牛说“哞”[/font]
会变成这样:
[font size=10]牛说“哞”[/font]
谢谢你的帮助...
我需要从用户提供的输入中删除 ' 和 " (单引号和双引号),但前提是它位于左括号和右括号 [ ] 内...我不想从字符串中删除任何其他内容。
所以这:
[字体大小=“10”]
需要更改为
[字体大小=10]
但是这个:
[font size=10]牛说“哞”[/font]
不会剥夺任何东西。
这个:
[font size="10"]牛说“哞”[/font]
会变成这样:
[font size=10]牛说“哞”[/font]
谢谢你的帮助...
你可以这样做:
$result = preg_replace('~(?>\[|\G(?<!^)[^]"\']++)\K|(?<!^)\G["\']~', '', $string);
解释:
(?> # open a group
\[ # literal [
| # OR
\G(?<!^) # contiguous to a precedent match but not at the start of the string
[^]"\']++ # all that is not quotes or a closing square bracket
)\K # close the group and reset the match from results
| # OR
(?<!^)\G["\'] # a contiguous quote
使用此模式,仅替换引号,因为括号内的所有其他内容都从匹配结果中删除。
我想到的快速变体(注意 php 5.3 语法):
$s = preg_replace_callback('/(\\[[^\\]]+])/', function ($match) {
return str_replace(['"', '\''], ['', ''], $match[1]);
}, $s);
你的情况很简单;(:
<?php
$str1 = '
[font size="10"]
needs to change to
[font size=10]
but this:
[font size=\'10\'] my single quoted size is \'OK?\'
[font size=10]The cow says "moo"[/font]
would not strip anything.
This:
[font size="10"]The cow says "moo"[/font]
would change to this:
[font size=10]The cow says "moo"[/font]
';
//
$str1 = preg_replace('/=[\'"]\s?([^\'"]*)\s?[\'"]/', '=$1', $str1);
echo "<pre>";
echo $str1;
echo "</pre>";
?>
使用的正则表达式:
=[\'"]\s?([^\'"]*)\s?[\'"]
以等号 = 开头的字符串,后跟双引号/单引号,前面有空格或不...