有人可以帮我从Ruby中的一堆文本中做出正确的正则表达式。我尝试了很多,但我不知道如何处理可变长度的标题。
字符串的格式为<sometext>title:"<actual_title>"<sometext>
。我想从这个字符串中提取actual_title。
我试过了/title:"."/
,但它没有找到任何匹配,因为它期望在打开报价后的一个变量之后有一个收盘报价。我无法弄清楚如何检查字符串的可变长度。任何帮助表示赞赏。感谢。
答案 0 :(得分:3)
/title:"([^"]*)"/
括号创建一个捕获组。里面是第一个角色类。 ^
表示它已被否定,因此它匹配任何不是"
的字符。 *
表示0或更多。您可以使用+
代替*
将其更改为一个或多个。
答案 1 :(得分:3)
.
匹配任何单个字符。将+
放在字符后将匹配其中一个或多个字符。因此.+
将匹配任何类型的一个或多个字符。此外,您应在其后面添加一个问号,以便与其遇到的第一个结束引号相匹配。所以:
/title:"(.+?)"/
如果要提取与其匹配的标题文本,则必须使用括号。
答案 2 :(得分:0)
我喜欢/title:"(.+?)"/
,因为它使用延迟匹配来阻止.+
消费所有文字,直到找到该行的最后"
为止。
如果字符串换行或包含转义引号,则无效。
在编程语言中,您希望能够在字符串中包含字符串分隔符,通常会提供“转义”字符或序列。
如果您的转义字符为\
,那么您可以写下这样的内容......
/title:"((?:\\"|[^"])+)"/
这是一张铁路图。铁路图显示了解析事物的顺序...想象一下你是从左边开始的火车。如果可以的话,你会消耗title:"
然后消费\"
..如果你不能消费not a "
。 &gt;意味着这条路径是首选...所以你试着循环...如果你不能,你必须消耗'''来完成。
我用https://regexper.com/#%2Ftitle%3A%22((%3F%3A%5C%5C%22%7C%5B%5E%22%5D)%2B)%22%2F
制作了这个但现在有一个Atom文本编辑器的插件就可以了。