93475


Gスプレッドシートにおいて、A3セルの文字列にB3:B32に記載した記号が含まれるかチェックをしたいと考えています。

A3に入っている文字列は

[code]

    Expected an int but was BOOLEAN at path $.data.next_page
    
[/code]

と仮定します。

まずはB3:B32にチェック対象の記号を入れて、

[code]

    =REGEXMATCH(A3,JOIN("|",B3:B32))
    
[/code]

としたのですが、チェック対象の記号にカッコやパイプなどが含まれるため「無効な正規表現」としてリファレンスエラーが返りました。(当然ですよね)

そこで、

[code]

    =REGEXMATCH(A3,"[`~!@#$%^&*()=+[{]}\|;:'"",<.>?]")
    
[/code]

としたところ、A3セルの文字列には「$」が含まれるためTRUEが反ることを想定したいのですが、FALSEが返りました。

この理由と、どのような関数にすれば正常にチェックできそうか、アドバイスをいただけますと幸いです。

※当方正規表現勉強2日めのため、お手柔らかにお願いします…


CC BY-SA 4.0
2023-01-20T07:20:06.787
93469
2023-01-23T03:29:59.843
56369
question
正規表現 google-spreadsheet
GoogleスプレッドシートのREGEXMATCHで記号の含有を検出したいが期待した値が返らない


> =REGEXMATCH(A3,"[`~!@#$%^&*()=+[{]}|;:'"",<.>?]")  
>  としたところ、A3セルの文字列には「$」が含まれるためTRUEが反ることを想定したいのですが、FALSEが返りました。

正規表現で文字の集合を指定する `[]` では, `]` にマッチさせるには前にバックスラッシュを付けるか集合の先頭に置きます。

[code]

    =REGEXMATCH(A3,"[]`~!@#$%^&*()=+[{}\|;:'"",<.>?]")
    
[/code]

`B3:B32` については, 特殊文字には前にバックスラッシュを付けるよう加工し無効化する必要があるでしょう

* * *

**正規表現の種類**

[REGEXMATCH](https://support.google.com/docs/answer/3098292?hl=ja)

> Google サービスでは RE2 正規表現を使用しています

RE2 は, 高速・低メモリ消費という特徴があります  
(低メモリーというか, 他の正規表現での ある種の指定が案外メモリーを大きく使用するのに比べ, RE2ではそういう指定が制限されてるとかで
大きくならない感じ？)

(後方参照や独占的量指定子など一部対応していない表現もある)

詳しくは
[re2/doc/syntax.txt](https://github.com/google/re2/blob/main/doc/syntax.txt)
などを参照のこと


CC BY-SA 4.0
2023-01-20T08:15:53.303
93475
2023-01-23T03:29:59.843
2023-01-23T03:29:59.843
43025
43025
93469
answer