Php 如何修剪字符串中的特殊字符?

Php 如何修剪字符串中的特殊字符?,php,regex,Php,Regex,我想删除字符串左侧和右侧的所有非字母数字符号,保留字符串中间的符号 我问过类似的问题,好的解决办法是: $str = preg_replace('/^\W*(.*\w)\W*$/', '$1', $str); 但它确实也删除了一些符号,如ąĄćĆęĘ等,并且不应将其作为仍按字母顺序排列的符号 上面的例子可以: ~~AAA~~ => AAA (OK) ~~AA*AA~~ => AA*AA (OK) ~~ŚAAÓ~~ => AA (BAD) 您可以传入一个有效字符列表,并告

我想删除字符串左侧和右侧的所有非字母数字符号,保留字符串中间的符号

我问过类似的问题,好的解决办法是:

$str = preg_replace('/^\W*(.*\w)\W*$/', '$1', $str);
但它确实也删除了一些符号,如ąĄćĆęĘ等,并且不应将其作为仍按字母顺序排列的符号

上面的例子可以:

~~AAA~~  => AAA (OK)
~~AA*AA~~ => AA*AA (OK)
~~ŚAAÓ~~  => AA (BAD)

您可以传入一个有效字符列表,并告诉函数替换该列表之外的任何字符:

$str=preg_replace('/[^a-zA-Z0-9*]+/',''$str)

方括号表示选择此范围内的所有内容。克拉(
^
)是not的正则表达式。然后列出有效字符(小写a到z,大写a到z,数字从0到9,以及星号)。方括号末端的加号表示选择0个或更多字符

编辑:

如果这是要保留的所有字符的列表,则:


$str=pregØu replace(“/”、“$str”)

确保在使用正则表达式时使用unicode的
u
标志

以下内容适用于您的输入:

$str = preg_replace('/^\W*(.*\w)\W*$/u', '$1', '~~ŚAAÓ~~' );

// str = ŚAAÓ
但这不起作用:(不要使用它)


当你说非字母数字时,你的意思是除了A-Za-z0-9之外没有别的
$str = preg_replace('/^\W*(.*\w)\W*$/', '$1', '~~ŚAAÓ~~' );