AI アシスタント
AI アシスタントが新登場
Lark に関する質問への回答を、生成 AI がまとめてくれます!
00:00
ボタンを押して働画をドラッグする
正規表現の構文の紹介

正規表現の構文の紹介

閲覧時間数:3 分
💡
Lark は RE2 構文をサポートしています。また、正規表現ではデフォルトで大文字と小文字が区別されます。
正規表現の使用例
この記事では、Lark の基本的な正規表現の使用方法と作成方法について説明しています。各使用例には、検索対象となるテキストの種類、テキストを検索するための 1 つまたは複数の正規表現、およびいくつかの説明(構文や特殊文字の使い方)が含まれています。
  1. 完全一致のフレーズを検索する
使用例
フレーズ stock tips を検索します。
正規表現
例 1: (\W|^)stock\stips(\W|$)
例 2:(\W|^)stock\s{0,3}tips(\W|$)
例 3: (\W|^)stock\s{0,3}tip(s){0,1}(\W|$)
説明
  • \W は、英字・数字・アンダースコアを除くすべての文字とマッチします。フレーズの前後に文字がある場合、正規表現とマッチしないこととなります。
  • 例 2 にて、\s はスペースとマッチします。{0,3} とは、stocktip の間に 0-3 個のスペースがあることを示します。
  • ^ は、新しい行の先頭とマッチします。すなわち、行の先頭に位置するフレーズ(フレーズの前に他の文字がない)は正規表現とマッチすることとなります。
  • $ は、行も末尾とマッチします。すなわち、行の末尾に位置するフレーズ(フレーズの後に他の文字がない)は正規表現とマッチすることとなります。
  • 例 3 にて、(s) は英字の s とマッチします。{0,1} とは、この英字が単語 tip の後に 0-1 回出現することをしまします。したがって、この正規表現は stock tipstock tips の両方とマッチします。このほか、{0,1} の代わりに符号 ? を使用することも可能です。
  1. リスト内のフレーズまたは単語を検索する
使用例
下記リスト内の任意のフレーズまたは単語を検索します。
  • baloney
  • darn
  • drat
  • fooey
  • gosh darnit
  • heck
正規表現
(?i)(\W|^)(baloney|darn|drat|fooey|gosh\sdarnit|heck)(\W|$)
説明
  • (...) はすべてのフレーズと単語をグループ化します。これにより、\W はかっこ内のすべての単語とフレーズに適用されます。
  • (?i) は、マッチする際に大文字と小文字を区別しないことを意味します。
  • \W は、英字・数字・アンダースコアを除くすべての文字とマッチします。フレーズまたは単語の前後に文字がある場合、正規表現とマッチしないこととなります。
  • ^ は、新しい行の先頭とマッチします。すなわち、行の先頭に位置するフレーズまたは単語(フレーズまたは単語の前に他の文字がない)は正規表現とマッチすることとなります。
  • $ は、行も末尾とマッチします。すなわち、行の末尾に位置するフレーズまたは単語(フレーズまたは単語の後に他の文字がない)は正規表現とマッチすることとなります。
  • | は「または」を意味します。すなわち、正規表現はリスト内のいずれかの単語またはフレーズとマッチします。
  • \s はスペースとマッチします。この文字を使用して、フレーズ内の単語を区切ることができます。
  1. スペルが近似する、または特殊文字を含む単語を検索する
使用例
単語「viagra」、およびスパム送信者が検出をバイパスするために使用する次のような表現を検索します。
  • vi@gra
  • v1agra
  • v1@gra
  • v!@gr@
正規表現
v[i!1][a@]gr[a@]
説明
  • この正規表現に \W が使用されていないため、viagra の前後に他の文字がある可能性があります。例えば、この正規表現は下記テキスト内の viagra とマッチします:
viagra!! または ***viagra***
  • [i!1] は、単語内の 2 つ目の文字(i! または 1)とマッチします。
  1. 特定のドメインのすべてのメールアドレスを検索する
使用例
ドメイン yahoo.comhotmail.comgmail.com のすべてのメールアドレスを検索します。
正規表現
(\W|^)[\w.\-]{0,25}@(yahoo|hotmail|gmail)\.com(\W|$)
説明
  • \W は、英字・数字・アンダースコアを除くすべての文字とマッチします。メールアドレスの前後に文字がある場合、正規表現とマッチしないこととなります。
  • ^ は、新しい行の先頭とマッチします。すなわち、行の先頭に位置するメールアドレス(メールアドレスの前に他の文字がない)は正規表現とマッチすることとなります。
  • $ は、行も末尾とマッチします。すなわち、行の末尾に位置するメールアドレス(メールアドレスの後に他の文字がない)は正規表現とマッチすることとなります。
  • [\w.\-] は、すべての文字(a-z、A-Z、0-9、アンダースコア)、ピリオドまたはハイフンとマッチします。これらは、メールアドレスのプレフィックスに含まれる一般的な文字です。\-(ハイフン)は、角かっこ内の文字リストの最後に置く必要があります。
  • ピリオドとハイフンの前にある \ は、これらの文字を除外するための表現です。すなわち、ピリオドとハイフン自体は正規表現の特殊文字ではありません。なお、角かっこ内のピリオドを除外する必要はありません。
  • {0,25} とは、 @ アットマークの前に出現する文字列に含まれる文字数が 0-25 文字であることを示します。
  • (...) はドメインをグループ化します。ドメインを区切るための | は、「または」を意味します。
  1. 特定範囲内のすべての IP アドレスを検索する
使用例
192.168.1.0 から 192.168.1.255 までの間にあるすべての IP アドレスを検索します。
正規表現
例 1:192\.168\.1\.
例 2:192\.168\.1\.\d{1,3}
説明
  • すべてのピリオドの前に \ は、この文字を除外するための表現です。すなわち、ピリオド自体は正規表現の特殊文字ではありません。
  • 例 1 では、最後のピリオドの後ろに文字がありません。このため、この正規表現は後ろの数値に関係なく、192.168.1. から始まるすべての IP アドレスとマッチします。
  • 例 2 では、\d は最後のピリオドに続く 0-9 のすべての数字とマッチします。{1,3} は、最後のピリオドの後ろに 1-3 桁の数字が続くことを意味します。この場合、この正規表現は 192.168.1. から始まる完全な IP アドレスとマッチします。ただし、192.168.1.999 などのような無効な IP アドレスとマッチすることもあります。
  1. 英字と数字を組み合わせたパターンを検索する
使用例
下記のような、さまざまな形式の発注書番号を検索します。
  • PO nn-nnnnn
  • PO-nn-nnnn
  • PO# nn nnnn
  • PO#nn-nnnn
  • PO nnnnnn
正規表現
(\W|^)po[#\-]{0,1}\s{0,1}\d{2}[\s-]{0,1}\d{4}(\W|$)
説明
  • \W は、英字・数字・アンダースコアを除くすべての文字とマッチします。番号の前後に文字がある場合、正規表現とマッチしないこととなります。
  • ^ は、新しい行の先頭とマッチします。すなわち、行の先頭に位置する番号(番号の前に他の文字がない)は正規表現とマッチすることとなります。
  • $ は、行も末尾とマッチします。すなわち、行の末尾に位置する番号(番号の後に他の文字がない)は正規表現とマッチすることとなります。
  • [#\-] は、英字 PO に続くシャープ記号またはハイフンとマッチします。{0,1} とは、これらの文字が 0-1 回出現することを意味します。\-(ハイフン)は、角かっこ内の文字リストの最後に置く必要があります。
  • \s はスペースとマッチします。{0,1} とは、スペースが 0-1 回出現することを意味します
  • \d は、0-9 の任意の数字とマッチします。{2} とは、番号のこの位置では必ず 2 桁の数字が出現することを意味します。
付録:正規表現の構文
kinds of single-character expressions
examples
any character, possibly including newline (s=true)
.
character class
[xyz]
negated character class
[^xyz]
Perl character class
\d
negated Perl character class
\D
ASCII character class
[[:alpha:]]
negated ASCII character class
[[:^alpha:]]
Unicode character class (one-letter name)
\pN
Unicode character class
\p{Greek}
negated Unicode character class (one-letter name)
\PN
negated Unicode character class
\P{Greek}
Composites
xy
x followed by y
x|y
x or y (prefer x)
Repetitions
x*
zero or more x, prefer more
x+
one or more x, prefer more
x?
zero or one x, prefer one
x{n,m}
n or n+1 or ... or m x, prefer more
x{n,}
n or more x, prefer more
x{n}
exactly n x
x*?
zero or more x, prefer fewer
x+?
one or more x, prefer fewer
x??
zero or one x, prefer zero
x{n,m}?
n or n+1 or ... or m x, prefer fewer
x{n,}?
n or more x, prefer fewer
x{n}?
exactly n x
x{}
(≡ x*) (NOT SUPPORTED) VIM
x{-}
(≡ x*?) (NOT SUPPORTED) VIM
x{-n}
(≡ x{n}?) (NOT SUPPORTED) VIM
x=
(≡ x?) (NOT SUPPORTED) VIM
Implementation restriction: The counting forms x{n,m}, x{n,}, and x{n} reject forms that create a minimum or maximum repetition count above 1000. Unlimited repetitions are not subject to this restriction.
Possessive repetitions
x*+
zero or more x, possessive (NOT SUPPORTED)
x++
one or more x, possessive (NOT SUPPORTED)
x?+
zero or one x, possessive (NOT SUPPORTED)
x{n,m}+
n or ... or m x, possessive (NOT SUPPORTED)
x{n,}+
n or more x, possessive (NOT SUPPORTED)
x{n}+
exactly n x, possessive (NOT SUPPORTED)
Flags
i
case-insensitive (default false)
m
multi-line mode: ^ and $ match begin/end line in addition to begin/end text (default false)
s
let . match \n (default false)
U
ungreedy: swap meaning of x* and x*?, x+ and x+?, etc (default false)
Flag syntax is xyz (set) or -xyz (clear) or xy-z (set xy, clear z).
Grouping
(re)
numbered capturing group (submatch)
(?P<name>re)
named & numbered capturing group (submatch)
(?<name>re)
named & numbered capturing group (submatch) (NOT SUPPORTED)
(?'name're)
named & numbered capturing group (submatch) (NOT SUPPORTED)
(?:re)
non-capturing group
(?flags)
set flags within current group; non-capturing
(?flags:re)
set flags during re; non-capturing
(?#text)
comment (NOT SUPPORTED)
(?|x|y|z)
branch numbering reset (NOT SUPPORTED)
(?>re)
possessive match of re (NOT SUPPORTED)
re@>
possessive match of re (NOT SUPPORTED) VIM
%(re)
non-capturing group (NOT SUPPORTED) VIM
Empty strings
^
at beginning of text or line (m=true)
$
at end of text (like \z not \Z) or line (m=true)
\A
at beginning of text
\b
at ASCII word boundary (\w on one side and \W, \A, or \z on the other)
\B
not at ASCII word boundary
\g
at beginning of subtext being searched (NOT SUPPORTED) PCRE
\G
at end of last match (NOT SUPPORTED) PERL
\Z
at end of text, or before newline at end of text (NOT SUPPORTED)
\z
at end of text
(?=re)
before text matching re (NOT SUPPORTED)
(?!re)
before text not matching re (NOT SUPPORTED)
(?<=re)
after text matching re (NOT SUPPORTED)
(?<!re)
after text not matching re (NOT SUPPORTED)
re&
before text matching re (NOT SUPPORTED) VIM
re@=
before text matching re (NOT SUPPORTED) VIM
re@!
before text not matching re (NOT SUPPORTED) VIM
re@<=
after text matching re (NOT SUPPORTED) VIM
re@<!
after text not matching re (NOT SUPPORTED) VIM
\zs
sets start of match (= \K) (NOT SUPPORTED) VIM
\ze
sets end of match (NOT SUPPORTED) VIM
\%^
beginning of file (NOT SUPPORTED) VIM
\%$
end of file (NOT SUPPORTED) VIM
\%V
on screen (NOT SUPPORTED) VIM
\%#
cursor position (NOT SUPPORTED) VIM
\%'m
mark m position (NOT SUPPORTED) VIM
\%23l
in line 23 (NOT SUPPORTED) VIM
\%23c
in column 23 (NOT SUPPORTED) VIM
\%23v
in virtual column 23 (NOT SUPPORTED) VIM
Escape sequences
\a
bell (≡ \007)
\f
form feed (≡ \014)
\t
horizontal tab (≡ \011)
\n
newline (≡ \012)
\r
carriage return (≡ \015)
\v
vertical tab character (≡ \013)
\*
literal *, for any punctuation character *
\123
octal character code (up to three digits)
\x7F
hex character code (exactly two digits)
\x{10FFFF}
hex character code
\C
match a single byte even in UTF-8 mode
\Q...\E
literal text ... even if ... has punctuation
\1
backreference (NOT SUPPORTED)
\b
backspace (NOT SUPPORTED) (use \010)
\cK
control char ^K (NOT SUPPORTED) (use \001 etc)
\e
escape (NOT SUPPORTED) (use \033)
\g1
backreference (NOT SUPPORTED)
\g{1}
backreference (NOT SUPPORTED)
\g{+1}
backreference (NOT SUPPORTED)
\g{-1}
backreference (NOT SUPPORTED)
\g{name}
named backreference (NOT SUPPORTED)
\g<name>
subroutine call (NOT SUPPORTED)
\g'name'
subroutine call (NOT SUPPORTED)
\k<name>
named backreference (NOT SUPPORTED)
\k'name'
named backreference (NOT SUPPORTED)
\lX
lowercase X (NOT SUPPORTED)
\ux
uppercase x (NOT SUPPORTED)
\L...\E
lowercase text ... (NOT SUPPORTED)
\K
reset beginning of $0 (NOT SUPPORTED)
\N{name}
named Unicode character (NOT SUPPORTED)
\R
line break (NOT SUPPORTED)
\U...\E
upper case text ... (NOT SUPPORTED)
\X
extended Unicode sequence (NOT SUPPORTED)
\%d123
decimal character 123 (NOT SUPPORTED) VIM
\%xFF
hex character FF (NOT SUPPORTED) VIM
\%o123
octal character 123 (NOT SUPPORTED) VIM
\%u1234
Unicode character 0x1234 (NOT SUPPORTED) VIM
\%U12345678
Unicode character 0x12345678 (NOT SUPPORTED) VIM
Character class elements
x
single character
A-Z
character range (inclusive)
\d
Perl character class
[:foo:]
ASCII character class foo
\p{Foo}
Unicode character class Foo
\pF
Unicode character class F (one-letter name)
Named character classes as character class elements
[\d]
digits (≡ \d)
[^\d]
not digits (≡ \D)
[\D]
not digits (≡ \D)
[^\D]
not not digits (≡ \d)
[[:name:]]
named ASCII class inside character class (≡ [:name:])
[^[:name:]]
named ASCII class inside negated character class (≡ [:^name:])
[\p{Name}]
named Unicode property inside character class (≡ \p{Name})
[^\p{Name}]
named Unicode property inside negated character class (≡ \P{Name})
作成者: Lark ヘルプセンター
最終更新:2023-05-11
このコンテンツはいかがでしたか?
送信しました。貴重なご意見をいただきありがとうございます。
サポートが必要な場合は、カスタマーサービスまでご連絡ください
0
rangeDom