问题描述
我不确定是否可以在一个正则表达式中完成,但询问也无妨。
我创建了表达式:
/(?<variable>\w+)((\.(?<method>\w+)\((?<parameter>[^{}%]*)\))|(\.(?<subvariable>\w+)))?/i
core.settings => $core['settings']
core.set(param1,param2) => $core->set('param1','param2')
- 字符串:core.settings
group <variable> = core
group <subvariable> = settings
- 字符串:core.get(param)
group <variable> = core
group <method> = get
group <parameter> = param
- string core.settings.time
group <variable> = core
group <subvariable> = settings.time
- string core.settings.time.set(param)
group <variable> = core
group <subvariable> = settings.time
group <method> = set
group <parameter> = param
有什么想法吗?以及是否普遍可行?
解决方法
你可以使用
^(?<variable>\w+)(?:\.(?<subvariable>\w+(?:\.\w+)*))??(?:\.(?<method>\w+)\((?<parameter>[^{}%]*)\))?$
参见regex demo。
详情:
-
^
- 字符串的开始 -
(?<variable>\w+)
- 组“变量”:一个或多个单词字符 -
(?:\.(?<subvariable>\w+(?:\.\w+)*))??
-.
出现零次或一次,然后将匹配一个或多个单词字符的“子变量”分组,后跟零或多次出现的.
和一个或多个单词字符 -
(?:\.(?<method>\w+)\((?<parameter>[^{}%]*)\))?
- 一个可选的序列-
\.
- 一个点 -
(?<method>\w+)
- 组“方法”:一个或多个单词字符 -
\(
-(
字符 -
(?<parameter>[^{}%]*)
- 组“参数”:除{
、}
、%
之外的零个或多个字符 -
\)
-)
字符
-
-
$
- 字符串结束。