使用PHP regex查找包含特殊字符的单词

时间:2016-04-26 10:45:50

标签: php regex

我有一个句子包括一些错误的单词(错误的单词包含多于1个特殊字符:== >> << ?? .. ,, !! ## $$ %% // ** -- ++ ex ...

我使用preg_match_all()来计算,但结果是错误的。 你能帮我解决吗?

str = "you he==rt are  my heart 4++5=9 9-8===1"
$pattern = '/[^\s]*(?:[\+]{2,}|[\%]{2,}|[\-]{2,}|[=]{2,}|[<]{2,}|[>]{2,}|[\*]{2,}|[\/]{2,}|[\:]{2,}|[\.]{2,}|[\?]{2,})/';

结果

he==
4++
8===

我需要找到结果

he==rt
4++5=9
9-8===1

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以使用

(?=(?:\S*[^\w\s]){2,})\S+

请参阅regex demo

详细说明:

  • (?=(?:\S*[^\w\s]){2,}) - 一个积极的先行,检查在当前位置之后是否有2个或更多序列:
    • \S* - 0+非空格字符后跟
    • [^\w\s] - 除了字或空格之外的字符
  • \S+ - 匹配1个非空格字符

IDEONE demo

$re = '~(?=(?:\S*[^\w\s]){2,})\S+~'; 
$str = "you he==rt are my heart 4++5=9 9-8===1 hyphenated-word"; 
preg_match_all($re, $str, $matches);
print_r($matches[0]); // Array( [0] => he==rt [1] => 4++5=9  [2] => 9-8===1 )