裏面我有以下的正則表達式,用於和工作原理:告訴正則表達式忽略括號時報價
/\[email protected](@?\w+(?:::\w+)?)([ \t]*)(\(((?>[^()]+) | (?3))* \))?/x
在此字符串@extends('template', 'test')
正確組,給我我需要什麼。
的問題是,如果字符串中包含引號內未封閉的括號 - 它將會失敗:
@extends('template', 'te)st')
給@extends('template', 'te)
作爲輸出
我怎樣才能知道這個表達式忽略括號是引號內(無論是'
或"
)
這是問題的一個RegExr演示:http://regexr.com/v1?396ci
而她e是一個字符串列表應該都能夠通過:
@extends('template', 'test') // working
@extends('template', $test) // working
@extends('template', 'te()st') // working
@extends('template', 'te)st') // broken
@extends('template', 'te())st') // broken
@extends('template', 'te(st') // broken
@extends('template', 'test)') // broken
@extends('template', '(test') // broken
我已經收窄 - 我想我需要能夠說
(
\( <-- only if not inside quotes
(
(?>[^()]+) | (?3)
)*
\) <-- only if not inside quotes
)?
但我似乎無法工作如何這條規則適用於這些特定的括號
感謝@Mayank - 這很接近 - 但它不包括測試用例的最終')'? – Laurence
p.s.我添加了一個額外的測試用例,我忘了在原始問題中包含這些用例。 – Laurence
@Laurence,按預期工作? –