试图获得一切的一个懒惰的正则表达式匹配,直到句子的第一个句点。直到第一个句点为止,正则表达式匹配所有东西
例如只想得到“杰克和吉尔”。从这句话:
“杰克和吉尔上了山,拿了一桶。”
/.+\./
匹配的整个句子(example)
/(.+?\.)/
比赛每个实例(example)
有没有办法只匹配第一个实例?
试图获得一切的一个懒惰的正则表达式匹配,直到句子的第一个句点。直到第一个句点为止,正则表达式匹配所有东西
例如只想得到“杰克和吉尔”。从这句话:
“杰克和吉尔上了山,拿了一桶。”
/.+\./
匹配的整个句子(example)
/(.+?\.)/
比赛每个实例(example)
有没有办法只匹配第一个实例?
/^([^.]+)/
让我们把它分解,
^
是换行符锚
[^.]
这,这不是一个时期
\+
采取直到一段
而表达式用()来封装它。
*“^是字符串锚的开始”*:不,这是错误的,在Ruby中'^'匹配行的开始(不是字符串)。字符串起始处的锚点是'\ A' –
请注意,当方括号内出现'.'时,它不需要转义。 '[\。]'与'[。]'相同。 (而且否定克拉不会改变这种情况。) – CAustin
你是对的,我从来没有理由使用\ A,所以这个概念为我融合在一起。更新以反映这一点。 –
如果您只希望第一次出现,请不要选择返回字符串中所有结果的方法scan
。您可以使用返回MatchData实例的匹配方法,但你也可以简单的写:
> "jack and jill. went up the hill. to fetch a pail."[/.+?\./]
=> "jack and jill."
我会倾向于使用正则表达式,但也有其他的选择。
str = "jack and jill. went up the hill. supposedly to fetch a pail of water."
str[0..i] if i = str.index('.')
#=> "jack and jill."
str = "three blind mice"
str[0..i] if i = str.index('.')
#=> nil
对于该演示网站使用插入符号^(。+?\。)' – revo
对第二个模式使用'match'方法。 –
就像@revo回答的那样,除非你想以某种方式将匹配放在捕获组中,否则它也可以没有括号[demo](https://regex101.com/r/tzaQhs/1/)。 – SWLim