R - 正则表达式:W 元字符在方括号内时不起作用

R - regex: W metacharacter not working when within square brackets

让我们采用以下字符串:

x <- " hello world"

我想提取第一个词。为此,我使用了以下正则表达式 ^\W*([a-zA-Z]+).* 并向后引用了第一组。

> gsub("^\W*([a-zA-Z]+).*", "\1", x)
[1] "hello"

它按预期工作。

现在,让我们在字符串中添加一个数字和下划线:

x <- " 0_hello world"

我将 \W 替换为 [\W_0-9] 以匹配新字符。

> gsub("^[\W_0-9]*([a-zA-Z]+).*", "\1", x)
[1] " 0_hello world"

现在,它不起作用,我不明白为什么。似乎将 \W 放在 [] 中时会出现问题,但我不确定为什么。 不过,正则表达式适用于 online regex tester using PCRE

我做错了什么?

快速解决方案是通过添加一个额外的参数来使用类似 Perl 的正则表达式 perl = TRUE

默认情况下,grep 使用扩展正则表达式(参见 ?regex),其中字符 class 以 [:xxx:] 的格式定义。但是,我找不到字符 class 来完全匹配 \W