我不确定在一个正则表达式中是否可以做到这一点,但询问一下也无妨。
我创建了表达式:
/(?<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
- string:core.get(param(
group <variable> = core
group <method> = get
group <parameter> = param
- 字符串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演示。
详细信息:
^
-字符串的开头- CCD_ 2-组";变量":一个或多个单词字符
- CCD_ 3-零次或一次出现CCD_;子变量";匹配一个或多个单词字符,后跟零次或多次
.
和一个或更多个单词字符 (?:.(?<method>w+)((?<parameter>[^{}%]*)))?
-的可选序列.
-一个点- CCD_ 8-组";方法":一个或多个单词字符
(
-一个(
字符- CCD_ 11-组";参数":
{
、}
、%
以外的零个或多个字符 )
-)
字符
$
—字符串结束