[英]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.