如何在Ruby中匹配regexp中的空格或行尾?
我正在使用Ruby 2.4。我试图写一个正则表达式来匹配一个字符串,其中第一个字符是“a”或“b”,然后下一个字符是空格或行尾。所以我想到了如何在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”不匹配,尽管我认为我写得很好。我如何修改它以使其正确 我试图写一个正则表达式来匹配一个字符串,其中第一个
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
。你不必保留第一句中的拼写错误。:-)