0

我需要从用户提供的输入中删除 ' 和 " (单引号和双引号),但前提是它位于左括号和右括号 [ ] 内...我不想从字符串中删除任何其他内容。

所以这:

[字体大小=“10”]

需要更改为

[字体大小=10]

但是这个:

[font size=10]牛说“哞”[/font]

不会剥夺任何东西。

这个:

[font size="10"]牛说“哞”[/font]

会变成这样:

[font size=10]牛说“哞”[/font]

谢谢你的帮助...

4

3 回答 3

1

你可以这样做:

$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

使用此模式,仅替换引号,因为括号内的所有其他内容都从匹配结果中删除。

于 2013-11-01T18:12:47.057 回答
0

我想到的快速变体(注意 php 5.3 语法):

$s = preg_replace_callback('/(\\[[^\\]]+])/', function ($match) {
        return str_replace(['"', '\''], ['', ''], $match[1]);
    }, $s);
于 2013-11-01T17:48:56.757 回答
0

你的情况很简单;(:

<?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?[\'"]

以等号 = 开头的字符串,后跟双引号/单引号,前面有空格或不...

于 2013-11-01T17:47:44.533 回答