我正在使用正则表达式(用于php)来匹配这种标记:
我实际上这个harcodred正则表达式只适用于第二个标签
/{€([\da-zA-Z_-]+:[\da-zA-Z_-]+:[\da-zA-Z_]+)}/
答案 0 :(得分:0)
以:
开头的字符串部分应该重复0 - n次,我是对的吗?
可以用这个
完成\{\€([\da-zA-Z_-])+(\:[\da-zA-Z\_\-]+)*\}
正则表达式的第二部分((\:[\da-zA-Z\_\-]+)*
)表示"以冒号开头,后跟数字序列,字符,下划线和短于一个字符的短划线应在字符串中重复0到n次# 34。
你可以玩它here。
答案 1 :(得分:0)
您可以使用单行正则表达式从:
内部获取单独的{...}
个分隔值:
preg_match_all('~(?:\G(?!\A):|{€(?=[^{}]*}))\K[\da-zA-Z_-]+~u', $s, $result)
请参阅regex demo
<强>详情:
(?:\G(?!\A):|{€(?=[^{}]*}))
- 上一次成功匹配的结束时:
之后的\G(?!\A):
(|
部分)或(€
)带{{1}的左括号}之后,除}
以外的0 +字符之后必须有}
(见(?=[^{}]*})
lookahead)\K
- 匹配重置运算符[\da-zA-Z_-]+
- (返回的实际匹配项)一个或多个字母,数字,_
或-
符号