Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.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
如何检查在Regexp(ruby)中声明了多少变量(掩码)?_Ruby_Regex - Fatal编程技术网

如何检查在Regexp(ruby)中声明了多少变量(掩码)?

如何检查在Regexp(ruby)中声明了多少变量(掩码)?,ruby,regex,Ruby,Regex,假设我有一个带有任意数量捕获组的regexp: pattern = /(some)| ..a lot of masks combined.... |(other)/ 有没有办法确定这些组的数量?如果您总能找到一个与给定正则表达式匹配的字符串,那么它就足以与正则表达式匹配,并且。但是,确定regexp是否有与其匹配的字符串是np难[1]。这只有在你事先知道你将得到什么样的正则表达式时才可行 班上第二好的方法是or。但是,如果我们这样做,我们需要解析正则表达式 我不能展望未来,但是从Ruby 2.

假设我有一个带有任意数量捕获组的regexp:

pattern = /(some)| ..a lot of masks combined.... |(other)/

有没有办法确定这些组的数量?

如果您总能找到一个与给定正则表达式匹配的字符串,那么它就足以与正则表达式匹配,并且。但是,确定regexp是否有与其匹配的字符串是np难[1]。这只有在你事先知道你将得到什么样的正则表达式时才可行

班上第二好的方法是or。但是,如果我们这样做,我们需要解析正则表达式

我不能展望未来,但是从Ruby 2.0开始,
Regexp
核心类中没有更好的方法

左括号表示文字左括号,前提是前面有一个未转换的反斜杠。反斜杠是不可缩放的,除非前面有未缩放的反斜杠。因此,一个字符前有奇数个反斜杠进行转义

未转义的左括号表示未后跟问号的捕获组iff。带有问号,它可以表示多种含义:
(?'name')
(?)
表示命名的捕获组。但是,命名和未命名捕获组不能在同一个正则表达式中共存[2]<代码>(?:)表示非捕获组。这是
(?标志:)
的特例<代码>(?>)表示原子群<代码>(?=),
(?!)
(?(?)
表示注释

Ruby regexp引擎支持正则表达式中的注释。在主正则表达式中考虑它们将非常困难。如果我们真的想支持它们,我们可以尝试剥离它们,但完全支持它们将变得混乱,因为内联标志可能会变为扩展模式(从而导致行注释)以正则表达式无法捕获的方式打开和关闭。我将继续,不支持正则表达式注释中的未转义括号

我们要计算:

  • 左括号的数目
    \(
  • 没有被反斜杠
    转义的(?(读取:前面没有奇数个反斜杠,前面没有另一个反斜杠)和
  • 后面没有问号(?!\?)
Ruby不支持无界查找,但是如果我们首先反转源代码,我们可以稍微重写第一个断言:
(?!(?:\\\\)*(?!\\)
。第二个断言将成为查找:
(?)

整个解决方案

def count_groups(regexp)
  # named capture support:
  # named_count = regexp.named_captures.count 
  # return named_count if named_count > 0

  # main: 
  test = /(?!<\?)\((?!(?:\\\\)*(?!\\))/
  regexp.source.scan(test).count
end
def count_组(regexp)
#命名捕获支持:
#named_count=regexp.named_.count
#如果命名计数>0,则返回命名计数
#主要内容:

测试=/(?!我不太清楚你的意思。你能用一些示例输入和你想要得到的输出类型来说明吗?你的意思是,如何确定一个正则表达式有多少个捕获组?如果你使用命名捕获,那将是一个很好的选择。嗯…这是一个很好的选择!但在我的情况下,它可能很难被保持,因为我要组合任意的n图案的数量和名称可能会有冲突。你到底需要它干什么?我感觉到了一种冲突。