2016-11-04 118 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