里面我有以下的正则表达式,用于和工作原理:告诉正则表达式忽略括号时报价
/\[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,按预期工作? –