在字符串中寻找特殊的字符


Finding special charaters in a string

问题:-

我使用以下正则表达式来搜索字符串中的特殊字符

/^((?!^[a-zA-Z0-9's]+$).)*$/

但是我不知道如何从字符串中获取所有特殊字符。

喜欢preg_match_all($pattern,'adcbasjkd*ACas!',$match)

array
(
    0 => 'adcbasjkd*ACas!'
    1 => '!'
)

如您所见,结果我没有获得adcbasjkd*ACas!中存在的*

问题:-

那么如何获得与模式匹配的所有字符呢?

并且模式是否适合查找特殊字符,因为我不太擅长正则表达式。

使用否定类

$pattern = '/[^a-z'd]/i';
preg_match_all($pattern,'adcbasjkd*ACas!',$match);

带有 ignoreCase 标志的正则表达式[^a-z'd]捕获任何不是字母和数字的内容。

[^a-zA-Z0-9's]

你可以直接使用它。请参阅演示。

https://www.regex101.com/r/rG7gX4/26

$re = "/[^a-zA-Z0-9''s]/mi";
$str = "adcbasjkd*ACas!";
preg_match_all($re, $str, $matches);

这个正则表达式说捕获属于可用字符类的所有内容。字符类被否定,因此任何不在它里面的东西都会被捕获。默认情况下,全局标志处于打开状态。因此,它将匹配所有此类字符。