带异常的点分字符串的正则表达式
Regular expression for dotted string with exception
我不确定是否可以在一个正则表达式中完成,但问问也无妨。
我创建了表达式:
/(?<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(参数)
group <variable> = core
group <method> = get
group <parameter> = param
- 字符串core.settings.时间
group <variable> = core
group <subvariable> = settings.time
- 字符串core.settings.time.set(参数)
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>[^{}%]*)
- 组“参数”:除 {
、}
、%
以外的零个或多个字符
\)
- 一个 )
字符
$
- 字符串结尾。
我不确定是否可以在一个正则表达式中完成,但问问也无妨。
我创建了表达式:
/(?<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(参数)
group <variable> = core
group <method> = get
group <parameter> = param
- 字符串core.settings.时间
group <variable> = core
group <subvariable> = settings.time
- 字符串core.settings.time.set(参数)
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>[^{}%]*)
- 组“参数”:除{
、}
、%
以外的零个或多个字符
\)
- 一个)
字符
$
- 字符串结尾。