Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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
Ruby 与条件正则表达式斗争_Ruby_Regex - Fatal编程技术网

Ruby 与条件正则表达式斗争

Ruby 与条件正则表达式斗争,ruby,regex,Ruby,Regex,我有一个简单的问题,但我无法解决这个问题。 我的字符串的格式为ID:dddd,具有以下正则表达式: /^ID: ([a-z0-9]*)$/ /^ID: ([a-z0-9]*) Status: ([a-z0-9]*)$/ 或者如下所示:ID:1234 Status:232,因此使用以下正则表达式: /^ID: ([a-z0-9]*)$/ /^ID: ([a-z0-9]*) Status: ([a-z0-9]*)$/ 现在我想做一个正则表达式,可以同时处理这两个问题。我想到的第一件事是: /

我有一个简单的问题,但我无法解决这个问题。 我的字符串的格式为
ID:dddd
,具有以下正则表达式:

/^ID: ([a-z0-9]*)$/
/^ID: ([a-z0-9]*) Status: ([a-z0-9]*)$/
或者如下所示:
ID:1234 Status:232
,因此使用以下正则表达式:

/^ID: ([a-z0-9]*)$/
/^ID: ([a-z0-9]*) Status: ([a-z0-9]*)$/
现在我想做一个正则表达式,可以同时处理这两个问题。我想到的第一件事是:

/^ID: ([a-z0-9]*)$|^ID: ([a-z0-9]*) Status: ([a-z0-9]*)$/
它是匹配的,但是我在研究条件正则表达式,并且认为应该可以按照(伪codish)的思路来做一些事情

只是,我无法正确地表达这一点。我想我应该使用
/?=/
,但不知道如何使用。 差不多

/((?=Status)^ID: ([a-z0-9]*) Status: ([a-z0-9]*)$|^ID: ([a-z0-9]*)$/
但这不起作用


您能帮忙吗?

您需要一个
*
的前瞻:

但是,对于您的特定示例,您不需要进行前瞻。您只需使用
量词即可:


您正在查找
^ID:(\d+)(:状态:(\d+))$

编辑: 因为这个问题被标记为Ruby,所以值得一提的是,根据这两个 而且,Ruby不做条件正则表达式


是这方面的一个很好的来源。

有趣的是,根据Ruby 1.8/1.9不支持条件正则表达式


你(或任何回答者)读过其他内容吗?如果是这样的话,更新链接问题可能会有所帮助,这样它就不再提供错误的信息。

您的最后一个示例不是有效的正则表达式。开括号太多。ID是否始终包含四个字母数字字符?如果是这样,为什么要写
*
而不是
{4}
?有大写字母和小写字母吗?这只是一个例子。数字的数量事先不知道。Regex断言/lookarounds和Regex条件是两件不同的事情。关于Regex条件的问题不是吗?我想我不太明白你的意思。这个问题和链接的问题似乎都使用了一般格式
(?(谓词)yes模式| no模式)
,所以除非我遗漏了什么,否则它们非常相关。哈!这可以解释一些事情:)但是,文档清楚地说明了另一种情况。@nathanvda:该页面似乎引用了Ruby的旧regex风格,但新风格中也不支持条件。Oniguruma doc的第A-3节提到了这一点:@jerhinesmith:标题提到了条件re,但是手头的问题可以在没有条件re的情况下解决。我使用(?:)使模式不匹配。这样一来,$1和$2将包含匹配的数字,后者是可选的。我同意,这很有道理,但如果Ruby不支持真正的“条件正则表达式”,那么至少应该在答案中指出这一点。我正在考虑更多关于这个问题的未来访问者(来自谷歌等),乍一看,当你解决这个问题时,似乎没有提到为什么他们应该使用这个方法,而不是使用条件正则表达式。这种风格比较是基于Ruby的旧正则表达式风格,但基于新的正则表达式风格(Oniguruma)也不支持条件。感谢您提供文档链接和两个示例。
/^ID: ([a-z0-9]*)(?: Status: ([a-z0-9]*))?$/