簡體   English   中英

正則表達式-忽略引號中的某些字符

[英]Regex - ignore certain characters in quotes

我試圖尋找答案,但是在這種情況下我找不到任何幫助。 我可能沒有搜索正確的術語。

我在使用此正則表達式時遇到了麻煩。 考慮以下字符串:

$str = "(1, 2, 'test (foo) bar'), (3, 4, '(hello,world)')";

我想結束一個多維數組,像這樣:

$arr = array(
   array(1, 2, 'test (foo) bar'),
   array(3, 4, '(hello,world)')
);

我想我可以運行一個正則表達式將其拆分成單獨的字符串,例如“(1,2,'test(foo)bar')“和”(3,4,'(hello,world)')“,然后運行一個正則表達式上的每個用逗號分隔,但是正如您所看到的,我的問題是數據在各個字符串中都有括號和逗號,我想忽略它們。

到目前為止,我已經有了它,它按照我的要求做了第一部分,除非數據中有括號,否則它會中斷。

preg_match_all('/\((.*?)\),?/', $str, $matches);

它給了我這個:

Array
(
    [0] => Array
        (
            [0] => (1, 2, 'test (foo)
            [1] => (3, 4, '(hello,world)
        )

    [1] => Array
        (
            [0] => 1, 2, 'test (foo
            [1] => 3, 4, '(hello,world
        )

)

它自然會截斷數據。 我該怎么做才能忽略引號中的括號? 如果我可以忽略它們,那么在下一步拆分這些匹配項時,我將能夠忽略逗號。

謝謝!

試試這個模式:

$pattern = '/((?:.*?),(?:.*?),(?:.*?)),(.*)/';

這有輸出

Array
(
    [0] => Array
        (
            [0] => (1, 2, 'test (foo) bar'), (3, 4, '(hello,world)')
        )

    [1] => Array
        (
            [0] => (1, 2, 'test (foo) bar')
        )

    [2] => Array
        (
            [0] =>  (3, 4, '(hello,world)')
        )

)

通常,您不能使用正則表達式執行此操作。 但是在這種情況下,您可以嘗試以下表達式:

\(([^']*?'.*?')\),?

([0-9]+), (\\'([A-Za-z0-9(), ]+)\\')?

這似乎在做您想要的。

$matches Array:
(
[0] => Array
    (
        [0] => 1, 
        [1] => 2, 'test (foo) bar'
        [2] => 3, 
        [3] => 4, '(hello,world)'
    )

[1] => Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
        [3] => 4
    )

[2] => Array
    (
        [0] => 
        [1] => 'test (foo) bar'
        [2] => 
        [3] => '(hello,world)'
    )

[3] => Array
    (
        [0] => 
        [1] => test (foo) bar
        [2] => 
        [3] => (hello,world)
    )
)

離這近一點嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM