如何解决带点字符串的正则表达式除外
我不确定是否可以在一个正则表达式中完成,但询问也无妨。
我创建了表达式:
/(?<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>[^{}%]*)
- 组“参数”:除{
、}
、%
之外的零个或多个字符 -
\)
-)
字符
-
-
$
- 字符串结束。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。