星号/下划线到strong/em的Ruby正则表达式?

星号/下划线到strong/em的Ruby正则表达式?,ruby,regex,markdown,Ruby,Regex,Markdown,作为我正在编写的聊天应用程序的一部分,我需要使用正则表达式匹配聊天信息中的星号和下划线,并将它们转换为和标记。因为我对正则表达式很糟糕,我真的被困在这里了。理想情况下,我们会将其设置为: 可以为strong/em标记一到三个单词,但不能超过 诸如“不可信”之类的模式将被匹配 只有一个或另一个(强或em)在一条线内工作 以上参数是按重要性排序的,只有#1是绝对必要的——其他参数只是漂亮而已。我最接近任何有效的方法是: text = text.sub(/\*([(0-9a-zA-Z).*])\*

作为我正在编写的聊天应用程序的一部分,我需要使用正则表达式匹配聊天信息中的星号和下划线,并将它们转换为
标记。因为我对正则表达式很糟糕,我真的被困在这里了。理想情况下,我们会将其设置为:

  • 可以为strong/em标记一到三个单词,但不能超过
  • 诸如“不可信”之类的模式将被匹配
  • 只有一个或另一个(强或em)在一条线内工作
以上参数是按重要性排序的,只有#1是绝对必要的——其他参数只是漂亮而已。我最接近任何有效的方法是:

text = text.sub(/\*([(0-9a-zA-Z).*])\*/,'<b>\1<\/b>')
text = text.sub(/_([(0-9a-zA-Z).*])_/,'<i>\1<\/i>')
text=text.sub(/\*([(0-9a-zA-Z.*])\*/,“\1”)
text=text.sub(/(0-9a-zA-Z.*]))/,“\1”)
但显然,这对我们的任何一个情人都不起作用


奇怪的是,现在还没有类似的例子,因为用星号来表示粗体之类的东西很流行。如果有,我在plugins/gems之外找不到它(这在这个实例中不起作用,因为我只需要在模型中的一个地方找到它)。任何帮助都将不胜感激。

这将帮助您完成您正在做的事情:

sub(/\*(.*)\*/,'<b>\1</b>')
sub(/_(.*)_/,'<i>\1</i>')
sub(/\*(.*)\*/,“\1”)
子(/u(.*)子(“\1”)

这将帮助您完成正在做的事情:

sub(/\*(.*)\*/,'<b>\1</b>')
sub(/_(.*)_/,'<i>\1</i>')
sub(/\*(.*)\*/,“\1”)
子(/u(.*)子(“\1”)

首先,你的标准有点奇怪,但是,好吧

似乎一种可能的算法是找到消息中的匹配数,对它们进行计数以查看是否少于4,然后尝试执行一组替换

strong_regexp = /\*([^\*]*)\*/
em_regexp = /_([^_]*)_/

def process(input)
  if input ~= strong_regexp && input.match(strong_regexp).size < 4
    input.sub strong_regexp, "<b>\1<\b>"
  elsif input ~= em_regexp && intput.match(em_regexp).size < 4
    input.sub em_regexp, "<i>\1<\i>"
  end
end
strong\u regexp=/\*([^\*]*)\*/
em_regexp=/_([^]*)_/
def过程(输入)
如果输入~=strong\u regexp&&input.match(strong\u regexp).size<4
input.sub-strong\u regexp,“\1”
elsif input~=em_regexp&&intput.match(em_regexp).size<4
input.sub em_regexp,“\1”
结束
结束

您的规范并不完全清楚,但如果您理解这一点,您可以自己调整它。

首先,您的标准有点奇怪,但是,好吧

似乎一种可能的算法是找到消息中的匹配数,对它们进行计数以查看是否少于4,然后尝试执行一组替换

strong_regexp = /\*([^\*]*)\*/
em_regexp = /_([^_]*)_/

def process(input)
  if input ~= strong_regexp && input.match(strong_regexp).size < 4
    input.sub strong_regexp, "<b>\1<\b>"
  elsif input ~= em_regexp && intput.match(em_regexp).size < 4
    input.sub em_regexp, "<i>\1<\i>"
  end
end
strong\u regexp=/\*([^\*]*)\*/
em_regexp=/_([^]*)_/
def过程(输入)
如果输入~=strong\u regexp&&input.match(strong\u regexp).size<4
input.sub-strong\u regexp,“\1”
elsif input~=em_regexp&&intput.match(em_regexp).size<4
input.sub em_regexp,“\1”
结束
结束

您的规范并不完全清楚,但是如果您理解这一点,您可以自己调整它。

您需要使用至少一个非贪婪量词(
+?
),而不是
*
,因为后者将匹配“sounbelievable”中的
*un*believ*
。还可以使用gsub()而不是sub()来格式化*多个强调标记。当
\1
最后包含一个与时会发生什么?您需要使用至少一个非贪婪量词(
+?
)而不是
*
,因为后者将匹配“sounbelievable”中的
*un*believ*
。另外,gsub()代替sub()来格式化*多个强调标记。当
\1
最后包含一个符号时会发生什么?在我看来,你应该使用一个减价宝石。我的印象是,这些不适合实现,因为它只是在聊天室中,而不是在论坛或CMS中。是否有选项指定哪些部分的降价适用于这些?在我看来,你应该使用降价宝石。我的印象是,这些将不适合实施,因为它只是在聊天,而不是论坛或CMS。是否有选项指定哪些部分的降价适用于这些部分?