Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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,因此,我知道如何找到一个单词关键字: text =~ /keyword1|keyword2|keyword3/i 但是我如何找到短语呢?例如,“天空是蓝色的……但有时它会变成橙色。” 我试着做: text =~ /(the sky is blue)|(orange sky)|(sky is blue but orange)/i 但那没用 想法?基本上,我如何将一些由空格分隔的关键字串在一起,并能够找到与这些短语对应的文本?如果不关心其他空白字符,请使用\s而不是空格。 但是,如果只需要匹配空

因此,我知道如何找到一个单词关键字:

text =~ /keyword1|keyword2|keyword3/i
但是我如何找到短语呢?例如,“天空是蓝色的……但有时它会变成橙色。”

我试着做:

text =~ /(the sky is blue)|(orange sky)|(sky is blue but orange)/i
但那没用


想法?基本上,我如何将一些由空格分隔的关键字串在一起,并能够找到与这些短语对应的文本?

如果不关心其他空白字符,请使用
\s
而不是空格。 但是,如果只需要匹配空格字符,则可以使用空格代码符号(
\u0020
):


如果不关心其他空白字符,请使用
\s
而不是空格。 但是,如果只需要匹配空格字符,则可以使用空格代码符号(
\u0020
):


我不知道你说的“那没用”是什么意思
=~
返回正则表达式找到匹配项的索引:

"The sky is blue....but sometimes it turns to orange." =~ /(the sky is blue)|(orange sky)|(sky is blue but orange)/i
# => 0
0
是“天空是蓝的”找到匹配项的索引。如果未找到匹配项,
=~
返回
nil
0
在Ruby中是“truthy”,而
nil
在Ruby中是“false”,因此匹配结果可以用在
if
语句中

如果这些正是您要寻找的短语,那么您现有的正则表达式应该可以正常工作

"The sky is green....but sometimes it turns to orange sky." =~ /(the sky is blue)|(orange sky)|(sky is blue but orange)/i
# => 46
在运行正则表达式之前,可以使用该方法删除多个空格

"The sky is green....but sky is blue      but orange sometimes.".squeeze!(" ") =~ /(the sky is blue)|(orange sky)|(sky is blue but orange)/i
# => 24

那有用吗?

我不知道你说的“那没用”是什么意思
=~
返回正则表达式找到匹配项的索引:

"The sky is blue....but sometimes it turns to orange." =~ /(the sky is blue)|(orange sky)|(sky is blue but orange)/i
# => 0
0
是“天空是蓝的”找到匹配项的索引。如果未找到匹配项,
=~
返回
nil
0
在Ruby中是“truthy”,而
nil
在Ruby中是“false”,因此匹配结果可以用在
if
语句中

如果这些正是您要寻找的短语,那么您现有的正则表达式应该可以正常工作

"The sky is green....but sometimes it turns to orange sky." =~ /(the sky is blue)|(orange sky)|(sky is blue but orange)/i
# => 46
在运行正则表达式之前,可以使用该方法删除多个空格

"The sky is green....but sky is blue      but orange sometimes.".squeeze!(" ") =~ /(the sky is blue)|(orange sky)|(sky is blue but orange)/i
# => 24

这有帮助吗?

您的预期输入和预期输出是什么?我的预期输入是至少2个单词的短语乘以该单词的许多倍,其中我希望选择那些与我的正则表达式的特定规则相匹配的短语(即,我有我正在搜索的特定短语-如上面关于天空的短语)。重要的是能够查看由随机数个单词组成的字符串(由一个空格分隔,甚至多个空格分隔),并检测我的正则表达式中是否出现了一个短语。请注意,a)paren是不必要的,b)您可以使用:
Regexp.union(“foo-bar”、“jim-jam”、“yay”生成文字正则表达式替换)#=>/foo\bar | jim\jam | yay/
您期望的输入和期望的输出是什么?我期望的输入是至少2个单词的词组到该词组的倍数,其中我希望选择那些与我的正则表达式的特定规则相匹配的词组(即,我有我正在搜索的特定词组-就像上面关于天空的词组)。重要的是能够查看由随机数个单词组成的字符串(由一个空格分隔,甚至多个空格分隔),并检测我的正则表达式中是否出现了一个短语。请注意,a)paren是不必要的,b)您可以使用:
Regexp.union(“foo-bar”、“jim-jam”、“yay”生成文字正则表达式替换)#=>/foo\bar | jim\jam | yay/
那么你的意思是:
text=~/(the\ssky\sis\sblue)|(orange\ssky)/i
?如果没有制表符或新行符号而不是空格,则是。或者可能
/the\s+sky\s+是\s+blue/
以允许多个空格字符。只键入一个文本空格字符而不使用其代码点有什么错?那么您的意思是:
text=~/(the\ssky\sis\sblue)|(orange\ssky)/i
?如果没有制表符或新行符号而不是空格,则是。或者可能
/the\s+sky\s+是\s+blue/
以允许多个空格字符。只键入一个文本空格字符而不使用其代码点有什么错?Hrmmmm…似乎我可能是指得太多了。我在regexp的末尾有一个拖尾管道
|
,因此它返回了很多误报。然而,现在它似乎运行良好。你说得对。谢谢没问题。关于如何改进正则表达式,请参见@Phrogz极好的评论。:)嗯……看来我可能把这件事搞砸了。我在regexp的末尾有一个拖尾管道
|
,因此它返回了很多误报。然而,现在它似乎运行良好。你说得对。谢谢没问题。关于如何改进正则表达式,请参见@Phrogz极好的评论。:)