Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 需要更好的正则表达式来测试;a「;但不是",;ax";_Regex_Reporting Services_Vbscript - Fatal编程技术网

Regex 需要更好的正则表达式来测试;a「;但不是",;ax";

Regex 需要更好的正则表达式来测试;a「;但不是",;ax";,regex,reporting-services,vbscript,Regex,Reporting Services,Vbscript,我在SSRS中使用以下正则表达式来测试参数中的特定列名: =IIf(InStr(Join(Parameters!ColumnNames.Value, ","), "x"), False, True) 如果某列不是所选列之一,则此操作将隐藏报表上的该列。如果没有另一个名为“xy”的列,这种方法就可以了。被测管柱可能为“z,x,w”,在这种情况下,测试工作正常;但它也可能是“z,xy,w”,在这种情况下,它将找到“x”,并同时显示“x”和“xy” 我试着检查“x”,这只在“x”不是字符串的最后一个

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

=IIf(InStr(Join(Parameters!ColumnNames.Value, ","), "x"), False, True)
如果某列不是所选列之一,则此操作将隐藏报表上的该列。如果没有另一个名为“xy”的列,这种方法就可以了。被测管柱可能为“z,x,w”,在这种情况下,测试工作正常;但它也可能是“z,xy,w”,在这种情况下,它将找到“x”,并同时显示“x”和“xy”

我试着检查“x”,这只在“x”不是字符串的最后一个字符时有效。我需要知道检查“x”或“x作为字符串的最后一段”的语法。不幸的是,“x”可以有任何长度。基本问题是我不知道如何在IIF语句中使用OR


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

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

基于您的代码中建议的最后一种技术,您需要

=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
,因为它返回一个整数而不是布尔值。

这是一个有趣的解决方案-我没有想到查看数组。然而,我对过滤器的理解是,它会查找“包含”字符串的元素,因此它仍然会返回一个包含“xy”的数组?我对VB脚本非常陌生,所以可能完全不符合标准。当我试着运行这个时,我得到了以下我不理解的错误:重载解析失败,因为没有缩小转换就不能调用可访问的“过滤器”:这个答案是完美的,只是在我已经理解的基础上增加了一点。非常感谢。