用于短代码语法的ruby正则表达式模式

时间:2013-01-09 16:40:18

标签: ruby regex

我正在寻找能够在文本中找到shortcode字符串的ruby兼容正则表达式。

正则表达式能够识别以下字符串:

  • [shortcode]
  • [shortcode=value]
  • [shortcode key=value]
  • [shortcode=value]Text[/shortcode]
  • [shortcode key1=value1 key2=value2]Text[/shortcode]
  • [shortcode]Text[/shortcode]

2 个答案:

答案 0 :(得分:1)

调整示例中提供的解决方案:

\[shortcode(.*?)\]((.*?)\[\/shortcode\])?

其中$1将获得第一个shortcode和最近的]之间的所有内容,而$3将是[shortcode...][/shortcode]之间的文字}。

至于从正则表达式中获取任意长度和顺序的已解析属性列表,不能,你不能这样做。您可以在$1中查找特定属性,例如:

key=(.*?)\b

但要获得完整列表,您需要使用其他方法(可能Shortcode API会有帮助)来标记/解析$1

答案 1 :(得分:0)

这个怎么样?

/\[(?<shortcode>([^\]]+))(.+?)?\](?:(.+?)?\[\/\k<shortcode>\])?/.match('[blah]whatever[/blah]')
# => #<MatchData "[blah]whatever[/blah]" shortcode:"blah">

(刚刚在您提供的链接的正则表达式中将$shortcode替换为(?<shortcode>([^\]]+)),而为第二个链接添加了\k<shortcode>