【问题标题】:Regular expression for dotted string with exception带点字符串的正则表达式异常
【发布时间】:2021-06-12 22:36:09
【问题描述】:

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

我创建了表达式:

/(?<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. 字符串 core.settings.time
group <variable> = core
group <subvariable> = settings.time
  1. 字符串 core.settings.time.set(param)
group <variable> = core
group <subvariable> = settings.time
group <method> = set
group <parameter> = param

有什么想法吗?以及一般情况下是否可行?

【问题讨论】:

  • 如果您能写出示例 1、2 和 3 的预期输出,将会非常有帮助。
  • 我希望现在更容易理解了
  • 我知道您要求它纯粹使用正则表达式,但是 PHP 函数可以吗?另外你用什么来运行正则表达式?还有可能是core.settings.time.set(param).format('Y-m-d') 之类的原因吗?
  • 我只要求正则表达式,解析匹配效果很好。

标签: php arrays regex string qregularexpression


【解决方案1】:

你可以使用

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

请参阅regex demo

详情

  • ^ - 字符串开头
  • (?&lt;variable&gt;\w+) - 组“变量”:一个或多个单词字符
  • (?:\.(?&lt;subvariable&gt;\w+(?:\.\w+)*))?? - 零次或一次出现.,然后将匹配一个或多个单词字符的“子变量”分组,后跟零次或多次出现. 和一个或多个单词字符
  • (?:\.(?&lt;method&gt;\w+)\((?&lt;parameter&gt;[^{}%]*)\))? - 可选序列
    • \. - 一个点
    • (?&lt;method&gt;\w+) - 组“方法”:一个或多个单词字符
    • \( - 一个 ( 字符
    • (?&lt;parameter&gt;[^{}%]*) - 组“参数”:除{}% 之外的零个或多个字符
    • \) - 一个 ) 字符
  • $ - 字符串结束。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多