gpt4 book ai didi

PHP 正则表达式 - 删除所有非字母数字字符

转载 作者:行者123 更新时间:2023-12-02 01:50:06 25 4
gpt4 key购买 nike

我使用 PHP。

我的字符串可以是这样的

这是一个字符串测试宽度 åäö 和一些 über+奇怪的字符:_like this?

问题

有没有办法删除非字母数字字符并用空格替换它们?以下是一些非字母数字字符:

  • -
  • +
  • :
  • _

我读过很多关于它的帖子,但它们不支持其他语言,比如这个:

preg_replace("/[^A-Za-z0-9 ]/", '', $string);

要求

  • 我的非字母字符列表可能不完整。
  • 我的内容包含不同语言的字符,例如 åäöü。可能还有很多。
  • 非字母数字字符应替换为空格。否则这个词就会粘在一起。

最佳答案

你可以试试这个:

preg_replace('~[^\p{L}\p{N}]++~u', ' ', $string);

\p{L} 代表所有字母字符(无论字母表是什么)。

\p{N} 代表数字。

带有 u 修饰符的主题字符串字符将被视为 unicode 字符。

或者这个:

preg_replace('~\P{Xan}++~u', ' ', $string);

\p{Xan} 包含 unicode 字母和数字。

\P{Xan} 包含所有非 unicode 字母和数字。 (小心,它也包含空格,您可以使用 ~[^\p{Xan}\s]++~u 保留空格)

如果您想要一组更具体的允许字母,则必须将 \p{L} 替换为 unicode table 中的范围。 .

示例:

preg_replace('~[^a-zÀ-ÖØ-öÿŸ\d]++~ui', ' ', $string);

为什么在这里使用所有格量词 (++)?

~\P{Xan}+~u 将为您提供与 ~\P{Xan}++~u 相同的结果。这里的区别在于,在第一个引擎中,引擎记录每个回溯位置(我们不需要),而在第二个引擎中则不记录(如在原子组中)。结果是少量的绩效利润。

我认为在可能的情况下使用所有格量词和原子组是一个很好的做法。

但是,PCRE 正则表达式引擎在明显情况下会自动使量词所有格(例如:a+b => a++b),除非 PCRE 模块有已使用选项 PCRE_NO_AUTO_POSSESS 进行编译。 (http://www.pcre.org/pcre.txt)

有关所有格量词和原子团的更多信息 here (possessive quantifiers)here (atomic groups)here

关于PHP 正则表达式 - 删除所有非字母数字字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16426976/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com