Php 如何提取复杂字符串中的参数
我想提取函数的第一个和第二个参数(如果有) 例如,我想从Php 如何提取复杂字符串中的参数,php,regex,wordpress,Php,Regex,Wordpress,我想提取函数的第一个和第二个参数(如果有) 例如,我想从\uuu('param1','param2')中提取param1和param2 以下是我发现的棘手问题: 可能没有第二个参数 参数引号可以是单引号或双引号 双引号参数可以包含单引号,反之亦然 需要提取参数的一些潜在情况: __('My test') __('Uber test', 'dan') __("test t'fdgfgd") __("test t'dfgdgf","fgf', 'dgfdg") 这是。你是对的,这有点棘手,但这是可
\uuu('param1','param2')
中提取param1
和param2
以下是我发现的棘手问题:
__('My test')
__('Uber test', 'dan')
__("test t'fdgfgd")
__("test t'dfgdgf","fgf', 'dgfdg")
这是。你是对的,这有点棘手,但这是可行的(请参阅所有示例): 这是如何工作的? 这对于一个令牌一个令牌的解释来说有点长,但是
(?:uu\(| G['']\s*,\s*)(['''])\K
将我们定位在开盘报价中,由于“Dr.\K
eep out”,我们放弃了迄今为止匹配的内容。稍后再回到这里*?
惰性地匹配最多(?=(?)可以断言后面的字符与开头引号(\1
反引用)相同,只要前面没有转义反斜杠((?)
\K
eep out”之前,我们要么匹配开头的\uuu\(
),然后匹配一个开头的字符串,由([“])
捕获,以确保结尾的字符串是相同的(后面的\1
引用)…或者\G
声明我们位于前一个匹配的最后一个字符之后,['”]\s*,\s*
匹配它的结束引号,然后是逗号(由可选空格包围),然后是开头字符串,由(['”])
捕获,以确保结束字符串是相同的(后面的\1
引用)这就是它的全部内容!这里有一个正则表达式可以为您提供匹配项:
(?:(?:')((?:(?!(?<!\\)').)+)(?:'(?:,\s*)?))|(?:(?:")((?:(?!(?<!\\)").)+)(?:"(?:,\s*)?))
<(?):(?):(?):(?)(这个句柄如何逃出引号?@ NeTeTyDakabsOL,你是对的,虽然这不是规范,这是一个重要的情况。完成。谢谢!):用正则表达式解析编程语言在大多数情况下是一个无望的企业。考虑一个合适的解析器(例如)。
__('My \'test')
__("My \"test")
(?:(?:')((?:(?!(?<!\\)').)+)(?:'(?:,\s*)?))|(?:(?:")((?:(?!(?<!\\)").)+)(?:"(?:,\s*)?))