R から完全な RegEx マッチを取得しようとしていますが、文字列の最初の部分しか取得できないようです。
http://regexpal.com/を使用すると、RegEx が適切であり、期待どおりであることを確認できます。私のデータでは、「エラーの種類」は、アスタリスクで始まる数字と次のコンマの間にあります。だから私は"*20508436572 access forbidden by rule"
最初のインスタンスと"*20508436572 some_error"
2 番目のインスタンスに戻ることを探しています。
例:
library(stringr)
regex.errortype<-'\\*\\d+\\s[^,\\n]+'
test_string1<-'2014/08/07 08:28:56 [error] 21278#0: *20508436572 access forbidden by rule, client: 111.222.111.222'
test_string2<-'2014/08/07 08:28:56 [error] 21278#0: *20508436572 some_error, client: 111.222.111.222'
str_extract(test_string1, regex.errortype)
str_extract_all(test_string1, regex.errortype)
regmatches(test_string, regexpr(regex.errortype, test_string1))
str_extract(test_string2, regex.errortype)
str_extract_all(test_string2, regex.errortype)
regmatches(test_string2, regexpr(regex.errortype, test_string2))
結果:
> str_extract(test_string1, regex.errortype)
[1] "*20508436572 access forbidde"
> str_extract_all(test_string1, regex.errortype)
[[1]]
[1] "*20508436572 access forbidde"
> regmatches(test_string1, regexpr(regex.errortype, test_string1))
[1] "*20508436572 access forbidde"
> str_extract(test_string2, regex.errortype)
[1] "*20508436572 some_error"
> str_extract_all(test_string2, regex.errortype)
[[1]]
[1] "*20508436572 some_error"
> regmatches(test_string2, regexpr(regex.errortype, test_string2))
[1] "*20508436572 some_error"
ご覧のとおり、長い一致は切り詰められていますが、短い一致は正しく解析されています。
ここで何か不足していますか、それとも完全な一致を取り戻すための他の方法はありますか?
乾杯、
アンディ。