我有一个句子包括一些错误的单词(错误的单词包含多于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
谢谢!
答案 0 :(得分:2)
您可以使用
(?=(?:\S*[^\w\s]){2,})\S+
请参阅regex demo
详细说明:
(?=(?:\S*[^\w\s]){2,})
- 一个积极的先行,检查在当前位置之后是否有2个或更多序列:
\S*
- 0+非空格字符后跟[^\w\s]
- 除了字或空格之外的字符\S+
- 匹配1个非空格字符$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 )