需要更好的正则表达式来测试 "a" 而不是 "ax"

Need better regex to test for "a" but not "ax"

我在 SSRS 中使用以下正则表达式来测试参数中的特定列名:

=IIf(InStr(Join(Parameters!ColumnNames.Value, ","), "x"), False, True)

如果某列不是选定的列之一,这将在报告中隐藏该列。如果没有另一个名为 "xy" 的列,这会很好地工作。被测试的字符串可能是 "z,x,w",在这种情况下测试工作正常;但它也可能是 "z,xy,w",在这种情况下它会找到 "x" 并同时显示 "x" 和 "xy"。

我尝试检查 "x,",这仅在 "x" 不是字符串的最后一个字符时有效。我需要知道检查 "x," 或 "x as the last piece of the string" 的语法。不幸的是 "x" 可以有任意长度。基本问题是我不知道如何在 IIF 语句中使用 OR。

我尝试了最明显的方法并不断出错。使用“\b”也不起作用,因为字符串中没有空格(因此单词边界不适用)。

您想匹配列名数组中的特定列名,但在一行中执行此操作以包含在 IIF 语句中。

根据 How can I quickly determine if a string exists within an array? 中建议的最后一种技术,您的代码需要。

=IIf((UBound(Filter(Parameters!ColumnNames.Value, "x", True, compare)) > -1), False, True)

好像哪里都没有真正的正则表达式?

您可以做的是将分隔符添加到您的检查中,这样您就可以只检查确切的字符串,而不是只检查包含它的任何字符串:

=IIf
  (InStr("," & Join(Parameters!ColumnNames.Value, ",") & ",", ",x,") > 0
  , False
  , True)

所以这会捕获 x 但不会捕获 xy

注意一点:

我添加了检查 InStr > 0,因为这个 returns 是一个整数而不是布尔值。