微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带点字符串的正则表达式除外

如何解决带点字符串的正则表达式除外

我不确定是否可以在一个正则表达式中完成,但询问也无妨。

我创建了表达式:

/(?<variable>\w+)((\.(?<method>\w+)\((?<parameter>[^{}%]*)\))|(\.(?<subvariable>\w+)))?/i

这有助于我将带点的字符串“转换”为数组或调用方法

core.settings => $core['settings'] 
core.set(param1,param2) => $core->set('param1','param2')

效果很好。但我不知道如何构建一个像这样工作的多级表达式:

  1. 字符串:core.settings
group <variable> = core  
group <subvariable> = settings
  1. 字符串:core.get(param)
group <variable> = core
group <method> = get
group <parameter> = param
  1. string core.settings.time
group <variable> = core
group <subvariable> = settings.time
  1. 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?