Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.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中匹配regexp中的空格或行尾?_Ruby_Regex_Match - Fatal编程技术网

如何在Ruby中匹配regexp中的空格或行尾?

如何在Ruby中匹配regexp中的空格或行尾?,ruby,regex,match,Ruby,Regex,Match,我正在使用Ruby 2.4。我试图写一个正则表达式来匹配一个字符串,其中第一个字符是“a”或“b”,然后下一个字符是空格或行尾。所以我想到了 2.4.0 :006 > data = "B U" => "B U" 2.4.0 :007 > data =~ /^[ab](^[[:space:]]|$)/i => nil 但正如您所看到的,我的表达式与字符串“bu”不匹配,尽管我认为我写得很好。我如何修改它以使其正确 我试图写一个正则表达式来匹配一个字符串,其中第一个

我正在使用Ruby 2.4。我试图写一个正则表达式来匹配一个字符串,其中第一个字符是“a”或“b”,然后下一个字符是空格或行尾。所以我想到了

2.4.0 :006 > data = "B U"
 => "B U" 
2.4.0 :007 > data =~ /^[ab](^[[:space:]]|$)/i
 => nil 
但正如您所看到的,我的表达式与字符串“bu”不匹配,尽管我认为我写得很好。我如何修改它以使其正确

我试图写一个正则表达式来匹配一个字符串,其中第一个字符是“a”或“b”,然后下一个字符是空格或行尾

Ruby中的正则表达式看起来像

/^[ab](?:[[:space:]]|$)/i

您的
^[ab](^[:space:]|$)
模式匹配行的开头,然后是
a
b
,然后是字符串开头的空格(
^[:space:]
,它将永远不会匹配)或行的结尾(
$
)。因此,正则表达式将匹配一行,该行等于
b
b


如果需要匹配整个字符串,而不仅仅是一行,请记住将
^
替换为
\A
,将
$
替换为
\z

空格或EOL只是一个限定符。只要在结尾加上一个
*
,比如
^[aAbB](?:[[:space:]].$).
或者把它放在空格后面
^[aAbB](?:[:space:]..*$)
如果空格后面需要一些东西,那么这个
^[aAbB](?:[:space:].+\124$)
我很怀疑你会得到比Wiktor更好的答案,但在未来,请考虑在选择之前等待更长的时间(也许2小时)。快速选择可能会阻碍其他答案,可能更好,可能只是有趣的答案,并使那些仍在准备答案的人短路。没有急事,只是别忘了……或者如果“空格”可以替换为“空格”,那么,
/\A[ab](?![^[:space:]])/i
/\A[ab](?!\s)/i
。你不必保留第一句中的拼写错误。:-)