首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >帮助Regex (PCRE)

帮助Regex (PCRE)
EN

Stack Overflow用户
提问于 2010-11-05 04:47:25
回答 1查看 163关注 0票数 0

我正在尝试计算一个PCRE正则表达式字符串,用于匹配和捕获可变长度字符串,以便在我的PHP应用程序中使用。我希望(如果可信的话)在一个解析中执行这些操作,但如果在计算上似乎最合理,我可以将其分成几个运行,并按照应用程序逻辑进行除法。

可以包含在大得多的文本块中的几个示例字符串:

代码语言:javascript
复制
{{ var:myVar }}
{{ component:myComponent}}
{{ var:myVar modifier:function[arg1|arg2] }}
{{ region:myRegion modifier:function[arg1|arg2] modifier:function[arg1] }}

正如您所看到的,目标字符串之间可能存在相当大的差异。摘要:

代码语言:javascript
复制
{{ type:name modifierType:modifierName[arg1|arg2|...] }}

}}.

  • A
  • 分隔符{{{{有效typename表示为[a-z_][a-z0-9_]*;只有一个type:name对,并且它将首先出现。有效modifierTypemodifierName表示为[a-z_][a-z0-9_]modifierName后面跟着方括号中的一个或多个参数的参数列表,[]。参数列表由管道|分隔。可以有零或多个\s+

集。

  • 字符串的所有部分都由一个或多个空格字符

分隔。

无论如何,仅仅是{{ type:name }}的匹配集很容易,但是我想不出一种有效获取可变长度修饰符列表的方法。对于简单的类型/名称对,我使用以下不区分大小写的/自由间距字符串:

代码语言:javascript
复制
'% {{ \s+ (?<type>var|component|region):(?<name>[a-z_][a-z0-9_]*) \s+ }} %ix'

我可能会将类型列表交换为一个通用的字母数字字符串捕获,以实现前向兼容性,但这一点目前是可行的。

因此,任何关于兼顾这两个方面的建议:

代码语言:javascript
复制
{{ component:myComponent }}
{{ var:myVar format:datetime[Y-m-d] container:h3[class=timestamp|id=main] }}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-05 04:54:09

您不希望在一个regexp中获取整个事件,因为您可能希望将修饰符作为一个数组。regexp将始终有固定数量的捕获,对应于捕获括号的数量。

抓取主要内容({{ something }}),将内容拆分为空格,然后循环并分别匹配每个内容,将内容推入适当的标量或数组中(如果允许具有相同前缀的更多修饰符)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4103651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档