我有一个字符串,想删除下面的任何字符:
不在此列表中:ÀÁÂÃÈÉÊÌÍÒÓÔÕÙÚĂĐĨŨƠàáâãèéêìíòóôõùúăđĩũơƯĂẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼỀỀỂ ưăạảấầẩẫậắằẳẵặẹẻẽềềểỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪễệỉịọỏốồổỗộớờởỡợụủứừỬỮỰỲỴÝỶỸửữựỳỵỷỹ
不在[a-z 0-9 A-Z]
不是:_和空格。
任何人都可以帮助我在PHP中使用这个正则表达式吗?
答案 0 :(得分:6)
试试这个正则表达式:
/[^a-z0-9A-Z_ÀÁÂÃÈÉÊÌÍÒÓÔÕÙÚĂĐĨŨƠàáâãèéêìíòóôõùúăđĩũơƯĂẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼỀỀỂưăạảấầẩẫậắằẳẵặẹẻẽềềểỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪễệỉịọỏốồổỗộớờởỡợụủứừỬỮỰỲỴÝỶỸửữựỳỵỷỹ]/u
u modifier使PHP将模式字符串解释为UTF-8。
如果这不起作用,请尝试使用Unicode character properties \p{L}
作为字母,或使用escape sequence \x{1234}
来描述单个Unicode字符或自定义字符范围:
/[^a-z0-9A-Z_\x{00C0}-\x{00FF}\x{1EA0}-\x{1EFF}]/u
答案 1 :(得分:3)
小心点。越南Unicode字符可以“分解”为“combining characters”,其中一个代码点用于基本字符,一个或多个代码点用于附加变音符号,或者它们可以是“precomposed”到单个Unicode代码点中。结合变音符号将无法正常使用正则表达式范围[]
,因为无论它们与哪个基本字符组合,您都将匹配它们。
较旧版本的Unicode不包含完整的越南语预组合字符集,因此希望找到越南语,并在野外组合字符。您可以使用Unicode normalization表单C, NFC 将组合字符转换为预合成字符。
答案 2 :(得分:3)
上述正则表达式缺少ế
,ă
和ề
也是重复的。
正确的越南人物名单:
àáãạảăắằẳẵặâấầẩẫậèéẹẻẽêềếểễệđìíĩỉịòóõọỏôốồổỗộơớờởỡợùúũụủưứừửữựỳỵỷỹýÀÁÃẠẢĂẮẰẲẴẶÂẤẦẨẪẬÈÉẸẺẼÊỀẾỂỄỆĐÌÍĨỈỊÒÓÕỌỎÔỐỒỔỖỘƠỚỜỞỠỢÙÚŨỤỦƯỨỪỬỮỰỲỴỶỸÝ
此外,请记住在使用正则表达式进行测试之前,以NFC格式(string.normalize('NFC')
)规范化字符串。阅读更多here。
答案 3 :(得分:1)
$newtext = preg_replace('/[^a-z0-9A-Z_[:space:]ÀÁÂÃÈÉÊÌÍÒÓÔÕÙÚĂĐĨŨƠàáâãèéêìíòóôõùúăđĩũơƯĂẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼỀỀỂ ưăạảấầẩẫậắằẳẵặẹẻẽềềểỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪễệỉịọỏốồổỗộớờởỡợụủứừỬỮỰỲỴÝỶỸửữựỳỵỷỹ]/u','',$text);