R中的正则表达式与其他语言的表现形式不同

时间:2015-04-08 19:17:16

标签: regex r

正则表达式模式^[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}$

Regular expression visualization

Debuggex Demo

...你没有得到任何匹配(当你在每个新行中开始这些词时都没有) - 为什么两种情况下的表现都不同?

2 个答案:

答案 0 :(得分:2)

默认情况下,^匹配字符串的开头,而$仅匹配结尾。

Debbugex和其他相关网站将整个输入textarea作为单个输入字符串传递,因此您的正则表达式实际上与MOT\ncvx\n123...AAPL匹配。

启用m(多行)标记 - 在此模式下,^$将匹配每行的开头/结尾,它将启用你可以测试多个输入。

请参阅updated debuggex demo

答案 1 :(得分:2)

在Debuggex中,没有匹配结果会产生,因为您没有打开正确的修改器。

在大多数正则表达式引擎中,锚点^$仅在默认的字符串的开头和结尾处匹配(分别)。如果要匹配每一行的开头/结尾(不仅是字符串的开头/结尾),请启用m多行)修饰符这导致了这种行为。

您可以看到启用此模式修改器的区别 - Debuggex Demo