Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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,我想从一些文本中提取数据并将其转储到数组中。考虑下面的文本作为示例数据: | Example Data | Title: This is a sample title | Content: This is sample content | Date: 12/21/2012 我目前正在使用以下正则表达式刮取在“冒号”字符后指定的数据: /((?=:).+)/ 不幸的是,这个正则表达式还获取冒号和冒号后面的空格。我如何只获取数据 还有,我不确定我是否做对了。。但看起来好像外部参数导致匹配返回数组

我想从一些文本中提取数据并将其转储到数组中。考虑下面的文本作为示例数据:

| Example Data
| Title: This is a sample title
| Content: This is sample content
| Date: 12/21/2012
我目前正在使用以下正则表达式刮取在“冒号”字符后指定的数据:

/((?=:).+)/
不幸的是,这个正则表达式还获取冒号和冒号后面的空格。我如何只获取数据

还有,我不确定我是否做对了。。但看起来好像外部参数导致匹配返回数组。这是帕伦夫妇的职责吗


编辑:我正在使用Rubular测试我的正则表达式

您可以将其更改为:

/: (.+)/
抓取第一组的内容。不过,lookback也能起作用,它能满足您的要求:

/(?<=: ).+/

/(?除了@minitech的答案外,您还可以进行第三次修改:

/(?<=: ?)(.+)/
这将在现有正则表达式周围放置一个分组,并在一个组中捕获它


是的,代码中的外括号将匹配。将其与我给出的后一个示例进行比较,其中整个前瞻是“分组”的,而不是不必要地使用
/(…)/
而不使用
/(?=…)/
,因为大多数正则表达式引擎中的第一个结果会返回整个匹配的字符串。

我知道您要求的是regex,但我刚刚看到了regex解决方案,发现对于那些不熟悉regex的人来说,这很难阅读

我也在使用Ruby,我决定使用:

line_as_string.split(": ")[-1]
这就是你所需要的,而且我觉得它更具可读性。
对于很长的字符串,它可能效率很低。但不是为了这个目的。

在Ruby中,就像在PCRE和Boost中一样,您可以使用
\K

\K
在整个正则表达式匹配中保留迄今为止匹配的文本。
h\Kd
只匹配
adhd
中的第二个
d

因此,您可以使用

/:[[:blank:]]*\K.+/     # To only match horizontal whitespaces with `[[:blank:]]`
/:\s*\K.+/              # To match any whitespace with `\s`
请参阅和

详细信息

  • -冒号
  • [[:blank:][]*
    -0或更多水平空白字符
  • \K
    -匹配重置运算符丢弃到目前为止与整个匹配内存缓冲区匹配的文本
  • +
    -匹配并使用除换行符以外的任何1个或多个字符(使用
    /m
    修饰符匹配任何字符,包括换行符)

感谢您的解释——第一个正则表达式似乎有一个错误(look-behind中的模式无效)。无论如何,我似乎必须在分组/look-behinds上做更多的学习。不允许使用可变长度lookbehind,因此
/(?另外,
/:\K.+//code>或
/:\s*\K.+//code>
/:[[:blank:]]*\K.+/     # To only match horizontal whitespaces with `[[:blank:]]`
/:\s*\K.+/              # To match any whitespace with `\s`