互斥式正则表达式模式

时间:2015-01-27 06:24:50

标签: c# regex rightnow-crm

我正在尝试构建一组正则表达式模式,正确识别一组字段类型,但无法弄清楚如何使它们全部互斥。这些语法约定似乎总是有足够的重叠,我做了一个我不想要的匹配。


变量:全部捕获

$字段

$ 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_]+) 

有人可以帮帮我吗?我很快就用完头发了......:\

2 个答案:

答案 0 :(得分:0)

^\$([a-zA-Z_]+)(?:\.[a-zA-Z_\.]+)+$

您可以尝试使用标准字段。请参阅演示。

https://www.regex101.com/r/bC8aZ4/8

\$([a-zA-Z_]+)(?:(?!.*\$)\.[a-zA-Z_\.]+)+

https://www.regex101.com/r/bC8aZ4/9

答案 1 :(得分:0)

我的问题最好通过以下方式解决:

\$([\w]+)\.((?!.+\$)(\.?[\w]+)+)