2012-02-22 49 views
2

任何字符,這是我的字符串正則表達式語法對於檢測內部托架

[CMD] [LPRT] [BRD] [0] [{\ 「點\」:[\ 「326,191 \」, 「327,191」,「328,189」,「328,176」,「328」,「150」,「328」,「124」,「316」,「93」,「 287,79「,」199,76「,」154,82「,」130,112「,」121,195「,」121,226「,」135「,」 264「,」164,292「,」184,296「,」272,301「,」392,276「,」462,243「,」512「,」183「,」 「,」513,159「,」507,141「,」504,138「,」495,135「,」485「,」134「,」480「,」134「,」 \「470,446 \」,\「464,158 \」,\「458,174 \」,\「458,187 \」,\「464,217 \」,\「484,245 \」,\「 524,302「,」556,345「,」579,403「,」586,439「,」586,450「,」571,459「,」500「,」 459「,」373,411「,」312,383「,」262,362「,」260,361「,」260,361「,」DrawingType「 :0,\「PenColor \」:\「Black \」,\「PenSize \」:5.0}]

我要搜索括號內

什麼這一定是結果:

[CMD]
[LPRT]
[BRD]
[0]
[{\ 「點」:[\「326,191 \」,\「327,191 \」,\「328,189 \」,\「328,176 \」,\「328,150 \」,\「328, 124「,93」,「287,79」,「199,76」,「154」,「82」,「130,112」,「121」,「195」 「,」121,226「,」135,264「,」164,292「,」184,296「,」272,301「,」392,276「 「」,「462,243」,「512,183」,「513,159」,「507,141」,「504」,「138」,「495,135」 ,「485,134」,「480」,「134」,「470」,「146」,「464,158」,「458,174」,「458,187」,「 「464,217」,「484,245」,「524,302」,「556,345」,「579,403」,「586,439」,「586」 ,450「,」571,459「,」500,459「,」373,411「,」312,383「,」262,362「,」260,361「 \「,\」DrawingType \「:0,\」PenColor \「:\」Black \「,\」PenSize \「:5.0}]

我試圖做我自己使用這個正則表達式參數:

string param = @「[[] [\ w \ s \ d - {}'] *]」;

,但它不會檢測到括號內的最後一個長文本..任何幫助,請..

回答

3

您輸入有嵌套括號 - 你的語言是不規律的,所以你要什麼,你不能做常用表達。如果你想要一個解析器,你應該寫一個解析器。

如果你保證嵌套將只有一層深,你可能會想出一個表達式來處理它。

編輯 - 如果你的實際投入並沒有嵌套(與你的問題衝突,但在與你在下面的評論說行),這個正則表達式應該是罰款:

\[.*?\] 

隨着正好0或1級嵌套:

\[([^[\]]|\[[^[\]]*\])*\] 

改編自此示例在此link

+0

字符串只有1行,括號內沒有其他[]。所以我的格式是這樣的。[anycharacters] [anycharacters] [anycharacters] [anycharacters] [anycharacters]並只檢測任何字符 – 2012-02-22 18:17:58

+1

@vrynxzent - 這不是你的輸入。它有[morestuff [morestuff] more moreuffuff]。 – 2012-02-22 18:18:54

+0

是的yep ..所以我怎麼能檢測到somestuff。更多的東西,更多的括號內的東西? 1層深僅 – 2012-02-22 18:21:22

0

你的代碼是一個用json填充的數組索引。

這是數組索引: [cmd][lPrt][brd][0]

其餘所有JSON。所以,現在,根據您使用的語言,您可以解碼json數據並獲得您要查找的結果。

我使用PHP和使用json_decode到JSON部分解碼並顯示如下:

Array 
(
    [0] => stdClass Object 
     (
      [points] => Array 
       (
        [0] => 326, 191 
        [1] => 327, 191 
        [2] => 328, 189 
        [3] => 328, 176 
        [4] => 328, 150 
        [5] => 328, 124 
        [6] => 316, 93 
        [7] => 287, 79 
        [8] => 199, 76 
        [9] => 154, 82 
        [10] => 130, 112 
        [11] => 121, 195 
        [12] => 121, 226 
        [13] => 135, 264 
        [14] => 164, 292 
        [15] => 184, 296 
        [16] => 272, 301 
        [17] => 392, 276 
        [18] => 462, 243 
        [19] => 512, 183 
        [20] => 513, 159 
        [21] => 507, 141 
        [22] => 504, 138 
        [23] => 495, 135 
        [24] => 485, 134 
        [25] => 480, 134 
        [26] => 470, 146 
        [27] => 464, 158 
        [28] => 458, 174 
        [29] => 458, 187 
        [30] => 464, 217 
        [31] => 484, 245 
        [32] => 524, 302 
        [33] => 556, 345 
        [34] => 579, 403 
        [35] => 586, 439 
        [36] => 586, 450 
        [37] => 571, 459 
        [38] => 500, 459 
        [39] => 373, 411 
        [40] => 312, 383 
        [41] => 262, 362 
        [42] => 260, 361 
        [43] => 260, 361 
       ) 

      [DrawingType] => 0 
      [PenColor] => Black 
      [PenSize] => 5 
     ) 

) 
+0

是的..即時通訊使用json ..我只想得到支架內的任何字符。 :)包括那個JSON部分.. – 2012-02-22 18:20:14

1

這個工作在一個快速測試:

(?: [[]{ .*? }] | [[] .*? ]) 

我喜歡留在白色空間可讀性;你會想要把它拿出來,或者指定「IgnorePatternWhitespace」選項。

有兩種方法可以匹配:「[{....}]」或「[...]」。這可能有點懶,但你可以建立一些東西。