我正在尝试构建一组正则表达式模式,正确识别一组字段类型,但无法弄清楚如何使它们全部互斥。这些语法约定似乎总是有足够的重叠,我做了一个我不想要的匹配。
变量:全部捕获
$字段
$ field_with_underscores
标准字段:捕获表,捕获第一个点后的所有内容
$ table.field
$ table.field.subfield
$ table.field.subfield_with_underscores
$ table.field_with_underscores
$ table.field_with_underscores.subfield
$ table.field_with_underscores.subfield_with_underscores
自定义字段:捕获表,捕获c $
后的所有内容$ $ table.c领域
$ $ table.c field_with_underscores
自定义对象系统属性:捕获表,捕获对象,捕获$后的所有内容
$ $ table.object领域
$ $ table.object field_with_underscores
到目前为止,我有以下内容:
变量:工作
^\$[a-zA-Z_]+$
标准字段:无法正常工作,选择自定义对象系统属性
\$([a-zA-Z_]+)\.([^c\$][a-zA-Z_\.]+)[\,]?
自定义字段:正常工作
\$([a-zA-Z_]+)\.[c]\$([a-zA-Z_]+)
自定义对象系统属性:工作
\$([a-zA-Z_]+)\.(?!c\$)([a-zA-Z_]+)\$([a-zA-Z_]+)
有人可以帮帮我吗?我很快就用完头发了......:\
答案 0 :(得分:0)
^\$([a-zA-Z_]+)(?:\.[a-zA-Z_\.]+)+$
您可以尝试使用标准字段。请参阅演示。
https://www.regex101.com/r/bC8aZ4/8
或
\$([a-zA-Z_]+)(?:(?!.*\$)\.[a-zA-Z_\.]+)+
答案 1 :(得分:0)
我的问题最好通过以下方式解决:
\$([\w]+)\.((?!.+\$)(\.?[\w]+)+)