2016-11-04 61 views
0

我想要得到一个正则表达式来连续抓取所有相同的符号(重复)。返回1个符号或所有相同符号的块。 “=”或“==”,但不是“=”“=”。快速正则表达式帮助匹配相同的符号

\ W或\ W +不起作用。

"===--,,,--;[]'"

array(
    [0] => === 
    [1] => -- 
    [2] => ,,, 
    [3] => -- 
    [4] => ; 
    [5] => [ 
    [6] => ] 
    [7] => ' 
) 

我不需要的代码把它变成一个数组。我得到了那个工作。只是正则表达式部分抢重复符号。

+2

这些符号'; []'“'不重复。重复可选吗? – chris85

+0

OP回答评论。 – AbraCadaver

回答

3

为了检查正则表达式中的重复部分,您需要使用backreferences

这是在JavaScript的例子:

a = "===--,,,--;[]'" 
 
t = a.match(/(.)(\1*)/g) 
 
console.log(t)

这里是在PHP代码:

preg_match_all("/(.)(\\1*)/", "===--,,,--;[]'", $m); 
var_dump($m[0]); 

输出:

array(8) { 
    [0]=> 
    string(3) "===" 
    [1]=> 
    string(2) "--" 
    [2]=> 
    string(3) ",,," 
    [3]=> 
    string(2) "--" 
    [4]=> 
    string(1) ";" 
    [5]=> 
    string(1) "[" 
    [6]=> 
    string(1) "]" 
    [7]=> 
    string(1) "'" 
} 

如果要指定只有个这些特定的字符,你可以使用:

preg_match_all("/([=\-,;\[\]'])(\\1*)/", "===--,,,--;[]'", $m); 
var_dump($m[0]); 
+0

匹配重复和非重复字符,并且不匹配OP描述为特别的任何特定字符。 – AbraCadaver

+0

@AbraCadaver,原始的输入只是与“特殊字符”,所以我认为他只有他们的字符串。答案更新了一个选项,只匹配**这些字符。 – Dekel

+0

我误解了答案,OP没有澄清“重复”。给他们他们要求的东西。准备大量评论“做这个和那个”:) – AbraCadaver

0

匹配的所有符号 “重复行”(连续):

<?php 
preg_match_all("/(.)(\\1)(\\1+)?/", "===--,,,--;[]'", $m); 
var_dump($m[0]); 

输出:

array(4) { 
    [0]=> 
    string(3) "===" 
    [1]=> 
    string(2) "--" 
    [2]=> 
    string(3) ",,," 
    [3]=> 
    string(2) "--" 
} 

您可以测试这个代码:DEMO