Ruby中的正则表达式

时间:2010-06-03 00:56:59

标签: ruby-on-rails ruby

有人可以帮我从Ruby中的一堆文本中做出正确的正则表达式。我尝试了很多,但我不知道如何处理可变长度的标题。

字符串的格式为<sometext>title:"<actual_title>"<sometext>。我想从这个字符串中提取actual_title。

我试过了/title:"."/,但它没有找到任何匹配,因为它期望在打开报价后的一个变量之后有一个收盘报价。我无法弄清楚如何检查字符串的可变长度。任何帮助表示赞赏。感谢。

3 个答案:

答案 0 :(得分:3)

/title:"([^"]*)"/

括号创建一个捕获组。里面是第一个角色类。 ^表示它已被否定,因此它匹配任何不是"的字符。 *表示0或更多。您可以使用+代替*将其更改为一个或多个。

答案 1 :(得分:3)

.匹配任何单个字符。将+放在字符后将匹配其中一个或多个字符。因此.+将匹配任何类型的一个或多个字符。此外,您应在其后面添加一个问号,以便与其遇到的第一个结束引号相匹配。所以:

/title:"(.+?)"/

如果要提取与其匹配的标题文本,则必须使用括号。

答案 2 :(得分:0)

我喜欢/title:"(.+?)"/,因为它使用延迟匹配来阻止.+消费所有文字,直到找到该行的最后"为止。

如果字符串换行或包含转义引号,则无效。

在编程语言中,您希望能够在字符串中包含字符串分隔符,通常会提供“转义”字符或序列。

如果您的转义字符为\,那么您可以写下这样的内容......

/title:"((?:\\"|[^"])+)"/

railroad_diagram

这是一张铁路图。铁路图显示了解析事物的顺序...想象一下你是从左边开始的火车。如果可以的话,你会消耗title:"然后消费\" ..如果你不能消费not a "。 &gt;意味着这条路径是首选...所以你试着循环...如果你不能,你必须消耗'''来完成。

我用https://regexper.com/#%2Ftitle%3A%22((%3F%3A%5C%5C%22%7C%5B%5E%22%5D)%2B)%22%2F

制作了这个

但现在有一个Atom文本编辑器的插件就可以了。