正则表达式模式^[A-Z]{2,4}$
指定要匹配的字符串应以大写字母开头,并以大写字母结尾。它还要求存在两个,三个或四个字母。其他任何东西都不会被视为有效:
filter_symbols <- function(symbols) {
valid <- regexpr("^[A-Z]{2,4}$", symbols)
return(sort(symbols[valid == 1]))
#valid
}
filter_symbols(c("MOT", "CVX", "123", "GOG2", "XLE", "AAPL", "AAPLS", "A"))
......它就像一个魅力:
[1] "AAPL" "CVX" "MOT" "XLE"
现在,当你在这里测试相同的代码时(那里有许多类似的在线正则表达式测试器):
^[A-Z]{2,4}$
...你没有得到任何匹配(当你在每个新行中开始这些词时都没有) - 为什么两种情况下的表现都不同?
答案 0 :(得分:2)
默认情况下,^
匹配字符串的开头,而$
仅匹配结尾。
Debbugex和其他相关网站将整个输入textarea作为单个输入字符串传递,因此您的正则表达式实际上与MOT\ncvx\n123...AAPL
匹配。
启用m
(多行)标记 - 在此模式下,^
和$
将匹配每行的开头/结尾,它将启用你可以测试多个输入。
答案 1 :(得分:2)
在Debuggex中,没有匹配结果会产生,因为您没有打开正确的修改器。
在大多数正则表达式引擎中,锚点^
和$
仅在默认的字符串的开头和结尾处匹配(分别)。如果要匹配每一行的开头/结尾(不仅是字符串的开头/结尾),请启用m
(多行)修饰符这导致了这种行为。
您可以看到启用此模式修改器的区别 - Debuggex Demo