正規表現では、パターン一致のために文字の特定の組み合わせが必要になります。文字列の一部またはサブセットを一致または検索するには、正規表現を使用します。たとえば、正規表現を使用して、コード文字列内の変数を一致させたり、レポート内の特定の値を一致させることができます。

メモ 「正規表現で一致」関数と「文字列の検索と置換」関数は文字列内のNULL文字をサポートしません。また、正規表現は空の文字列を一致結果として返すことができます。正規表現が一致結果を返さない場合、一致後オフセットに–1を返します。

正規表現のサポートは、PCREライブラリパッケージにより提供されています。PCREライブラリパッケージ再配布時のライセンスの詳細については、<National Instruments>\_Legal Informationディレクトリを参照してください。

RCRE (Perl Compatible Regular Expressions) については、www.pcre.orgのDocumentationの「Perl 5 Regular Expression」を参照してください。

正規表現入力および検索文字列入力で使用できる特殊文字

「正規表現で一致」関数の正規表現入力、および「文字列の検索と置換」関数の検索文字列入力には下表の特殊文字を使用します。「文字列の検索と置換」関数で特殊文字を使用するには、関数を右クリックしてショートカットメニューから正規表現を選択します。

メモ 以下の特殊文字は、「正規表現で一致」関数と「文字列の検索と置換」関数のみで使用できます。「パターンで一致」関数は、限定セットの正規表現を使用しますが、「正規表現で一致」関数よりも実行速度は高速です。「パターンで一致」関数の正規表現については、「パターンで一致」で使用する特殊文字」トピックを参照してください。
特殊文字 説明
. (ピリオド) 改行文字以外の任意の単一の文字と一致します。角括弧内では、.はリテラルです。 入力文字列: Welcome to LabVIEW.正規表現: t....一致: to La 正規表現として[z.]と入力した場合、ピリオドはリテラルになり、表現は、.またはzと一致します。この例では、[z.].を一致として返します。
* その前の1つの文字、文字グループ、または文字クラスを入力内に0回以上現れることができるものとしてマークします。アスタリスクは0回現れるパターンと一致することができるので、パターン全体がアスタリスクでマークされている場合は、アスタリスクが入った正規表現は、空文字列を返すことができます。この数量詞は、デフォルトでは一致対象の文字数に制限がありません。 入力文字列: Hello LabVIEW!正規表現: el*一致: ell w*(welcome)*という表現は、関数で他の一致が見つからない場合、空文字列と一致します。
+ その前の1つの文字、文字グループ、または文字クラスを入力内に1回以上現れることができるものとしてマークします。この数量詞は、デフォルトでは一致対象の文字数に制限がありません。 入力文字列: Hello LabVIEW!正規表現: el+ 一致: ell
? その前の1つの文字、文字グループ、または文字クラスを入力内に0回または1回現れることができるものとしてマークします。この数量詞は、デフォルトでは一致対象の文字数に制限がありません。数量詞の直後に使用すると、?はその数量詞の一致回数を最小に変更します。変更可能数量詞には、*+、および{}が含まれます。 入力文字列: Hello LabVIEW!正規表現: el? 一致el 入力文字列: <ul><li>Hello</li><li>LabVIEW</li></ul> 正規表現: <li>.+?</li> 一致:<li>Hello</li> 2番目の例で、正規表現から?を削除すると、新しい一致は<li>Hello</li><li>LabVIEW</li>になります。これは、+の直後に?を含まない限り、+は可能な限り多くの文字に一致するからです。この正規表現は、<li></li>タグ間の文字列と一致させるために使用することができます。
{n,N} その前の1つの文字、文字グループ、または文字クラスを、指定回数現れることができるものとしてマークします。nは最小回数、Nは最大回数です。1つの数を指定することもできます。範囲を指定した場合、この数量詞は、可能な最大回数一致します。 入力文字列: <ul><li>Hello</li><li>Lab</li><li>VIEW</li><li>!</li></ul> 正規表現:(<li>.+?</li>){2} 一致: <li>Hello</li><li>Lab</li> 入力文字列: <ul><li>Hello</li><li>Lab</li><li>VIEW</li><li>!</li></ul> 正規表現: (<li>.+?</li>){1,3} 一致: <li>Hello</li><li>Lab</li><li>VIEW</li> 2番目の例では、最小一致回数が1で、最大一致回数が3です。正規表現は、指定した回数限度内で最大回数と一致するので、この正規表現は3つの一致を返します。
[] 指定した文字セットのどの文字とも一致が可能な、文字クラスを作成します。たとえば、[abc]は、ab、またはcと一致します。-を使用して範囲内の文字を指定することができます。たとえば、[a-z]は任意の小文字1文字と一致します。「正規表現で一致」関数と「文字列の検索と置換」関数は、^-、および\を除き、角括弧内の特殊文字をリテラルとして解釈します。 入力文字列: version=14.0.1正規表現[0-9]+(\.[0-9]+)*一致: 14.0.1 正規表現[0-9]は、任意の1桁数と一致します。プラス記号は、前の文字クラス[0-9]の1回以上、最大回数の出現と一致します。括弧は文字グループを作成します。この文字グループは、小数点 (.) およびそれに続くすべての数字という部分一致を作成します。表現¥.は、リテラル小数点 (.) と一致します。プラス記号は、前の文字クラス[0-9]の1回以上、最大回数の出現と一致します。アスタリスクは前の文字グループ(¥.[0-9]*)の0回以上の出現と一致するので、この正規表現は小数点 (.) がない整数とも一致します。この正規表現は、任意の整数、小数、バージョン番号、IPv4アドレス、または小数点 (.) で区切られたその他の数列と一致させるために使用できます。
() 指定した文字セット全体と一致させる文字グループを作成します。文字グループの直後の数量詞は、グループ全体を修飾します。また、括弧は部分一致を作成し、個々の文字グループは部分一致を返します。文字グループを別の文字グループの中にネストした場合、正規表現は、内側のグループよりも先に外側のグループの部分一致を作成します。サブ一致出力にアクセスするには、「正規表現で一致」関数ノードを拡大します。また、前方参照を使用することで、表現内の以降で部分一致を参照することもできます。正規表現で前方参照を使用する方法については、後半の「前方参照」セクションを参照してください。 入力文字列: Hello LabVIEW!正規表現: (el.)..(L..)一致: ello Lab サブ一致1: ell サブ一致2: Lab 入力文字列: Hello LabVIEW!正規表現: (.(el.).).(L..)一致: Hello Lab サブ一致1: Hello サブ一致2: ell サブ一致3: Lab
| 可能な代替一致の境界を指定します。この文字は、複数の文字グループのいずれかと一致させたいときに便利です。(|)が含まれている正規表現は、一致条件の指定順序とは関係なく、入力文字列で最初に見つかった一致を返します。たとえば、dog|catcat|dogという正規表現は、the dog chased the catに対して両方ともdogを返します。 入力文字列: value=FALSE total=12.34 token=TRUE正規表現: (value|token)=(TRUE|FALSE)一致: value=FALSEサブ一致 1: valueサブ一致 2: FALSE 正規表現は入力文字列内の最初の一致候補を返します。入力文字列内でvalue=FALSEよりも前にtoken=TRUEがある場合、結果は上とは異なり、正規表現はtoken=TRUEを返します。
^ パターンの最初の文字として使用した場合、一致を文字列の最初に固定します。「正規表現で一致」関数または「文字列の検索と置換」関数で複数行?入力をTRUEに設定した場合、^は、現在のプラットフォームの行末を使用して文字列内の各行頭と一致します。また、^を文字クラスの先頭に追加することによって、指定された文字クラスにない任意の文字と一致することもできます。たとえば、[^0-9]は数字でない任意の文字と一致します。[^a-zA-Z0-9]は、小文字または大文字ではなく、および数字以外の任意の文字に一致します。 入力文字列: Hello LabVIEW!正規表現: ^[^]+一致: Hello この正規表現は、入力文字列の最初からの (空白文字を除く) 最大数の文字と一致します。この正規表現を使用して、文字列内の最初の単語、数値、その他の文字の組み合わせを分離することができます。入力文字列: Hello LabVIEW正規表現: ^LabVIEW一致: LabVIEW この正規表現は、複数行?がTRUEに設定されている場合にのみ、LabVIEWと一致します。
$ パターンの最後の文字として使用される場合、文字列の最後に一致を固定します。「正規表現で一致」関数または「文字列の検索と置換」関数で複数行?入力をTRUEに設定した場合、^は、現在のプラットフォームの行末を使用して文字列内の各行末と一致します。 入力文字列: Hello LabVIEW!正規表現: [^]+$ 一致: LabVIEW!この正規表現は、入力文字列の最後からの (空白文字を除く) 最大数の文字と一致します。この正規表現を使用して、文字列内の最後の単語、数値、その他の文字の組み合わせを分離することができます。入力文字列: Hello LabVIEW正規表現: Hello$一致: Hello この正規表現は、複数行?がTRUEに設定されている場合にのみ、Helloと一致します。
\ このリスト内の特殊文字が¥マークの直後に続くときに、その意味を取り消し、そのリテラル文字と一致します。以下のエスケープ表現には、特別な意味があります。
  • ¥b―単語の境界を示します。単語の境界とは、ワード文字に隣接する非ワード文字で、逆もまた真です。ワード文字とは、英数文字またはアンダースコア (_) です。例えば、\bhatは、hatchethatと一致しますが、thatと一致しません。hat\bは、thathatと一致しますが、hatchetとは一致しません。\bhat\bは、hathatと一致しますが、thatまたはhatchetとは一致しません。
  • ¥c―書かれた記号を表さない文字セットのコードポイントのすべてを含む、制御器または非印刷文字のすべてに一致します。
  • ¥w―任意の語句と一致し、[a-zA-Z0-9_]と同等です。
  • ¥W―任意の単語ではない文字と一致し、[^a-zA-Z0-9_]と同等です。
  • ¥d―任意の数字の文字と一致し、[0-9]と同等です。
  • ¥D―任意の数字以外の文字と一致し、[^0-9]と同等です。
  • \N - 同じ正規表現内の前のサブ一致と一致します。Nは数字を表します。\Nの使用方法については、「前方参照」セクションを参照してください。
  • ¥s―スペース、改行、タブ、復帰文字などの、任意の空白文字と一致します。
  • ¥S―空白以外の任意の文字と一致します。
  • ¥n―改行文字と一致します。
  • ¥t―タブ文字と一致します。
  • ¥r―復帰文字と一致します。
  • ¥f―フォームフィード文字と一致します。
  • ¥031―8進文字 (この場合8進数の31) と一致します。
  • ¥x3F―16進文字と一致します (この場合16進数の3F)
入力文字列: total=$12.34 正規表現: \$\d+(\.\d{2})?一致: $12.34 表現\$は、\マークが特別な意味を打ち消すので、リテラルのドル記号と一致します。¥d+という表現は、最大桁の数字と一致します。一致は少なくとも1桁の数字である必要があります。(¥.¥d{2})?という表現は、小数点 (.) および2桁の数字と一致しますが、?により、正規表現のこの部分はオプションになります。この正規表現は、小数点に.を使用するドル値と一致させるために使用することができます。小数区切りとして、これ以外の文字を使用するロケールでは、正規表現を変更する必要があります。入力文字列: NEWtoken=FALSE token=TRUE checkFile=TRUE total=12.34正規表現: \btoken=\w+\s\b\S*一致: token=TRUE checkFile=TRUE この正規表現は、\bにより、単語の最初のtoken=だけと一致するので、NEWtoken=FALSEtoken=FALSEとは一致しません。¥w+という表現は、最大数のワード文字と一致します。一致は少なくとも1文字である必要があります。この例では、¥w+TRUEと一致します。¥sという表現は、空白文字と一致します。¥b¥S*という表現は、次の空白文字が見つかるまでの、単語を始めるすべての非空白文字と一致します。この例では、¥b¥S*checkFile=TRUEと一致します。入力文字列: Welcome to   LabVIEW!正規表現: come\n\S*\t\w*\x21 一致: come to   LabVIEW!come¥nという表現は、リテラル文字に改行文字が続くものと一致します。¥S*という表現は、最大数の非空白文字と一致します。この場合は、toという語と一致します。¥tという表現は、toLabVIEW!の間のタブと一致します。¥w*という表現は、最大数のワード文字と一致します。この場合は、LabVIEWと一致します。¥x21という表現は、21は感嘆符の16進数コードなので、感嘆符と一致します。
ヒント 一致を文字列の先頭および末尾に固定するには、^をパターンの最初の文字に使用し、$をパターンの最後の文字として使用します。たとえば、^LabVIEW$LabVIEW内のLabVIEWと一致しますが、LabVIEW!またはHello LabVIEWとは一致しません。一致を文字列の先頭および末尾に固定した場合、文字列全体と一致する必要があります。

置換文字列入力で使用できる特殊文字

「文字列の検索と置換」関数の置換文字列入力では、以下の特殊文字が使用できます。

特殊文字 説明
$nまたは${n} 指定した部分一致の前または後に指定文字列を挿入します。「文字列の検索と置換」関数の置換文字列入力で前方参照を使用する方法については、後半の「前方参照」セクションを参照してください。正規表現で9個以上のサブマッチがあり、9番目以降のサブマッチを参照したい場合は、${n}を使用してください。$12は、最初のサブマッチのみを挿入します。これは、関数が$に直後に続く最初の数字だけを読み取るためです。しかし、${12}は12番目の部分一致を挿入します。 入力文字列 : Welcome LabVIEW検索文字列 : (LabVIEW)置換文字列 : to $1!結果文字列 : Welcome to LabVIEW!入力文字列 : Welcome to the LabVIEW Help!検索文字列 : We(l)(co(m)e)((to)(t(he) (Lab)(VIE(W)) He(lp)(!)置換文字列 : $7${11}ful${12}結果文字列 : helpful!
\$n 置換文字列で使用した特殊文字の解釈をキャンセルします。 入力文字列: total=123 per day検索文字列: (\d+)(per \w*)?置換文字列: \$1$2結果文字列: total=$123 per day リテラル文字$を挿入するには、この例のように\$を使用します。リテラル¥マークを指定するには、¥¥と入力します。

前方参照

同じ正規表現内の前方の部分一致を参照するには、前方参照を使用します。前方参照を使用することにより、表現内で文字グループを使用して部分一致を作成し、表現内の以降でその部分一致と一致させることができます。

「正規表現で一致」関数の正規表現、または「文字列の検索と置換」関数の検索文字列入力で前方参照を指定するには、最初のサブ一致を\1、2番目のサブ一致を\2というように指定します。たとえば、以下の正規表現を考えてみます。

(["*$])(\w+)\1\2\1

最初の文字グループには、"*、または$と一致する文字クラスが含まれています。2番目の文字グループは、1つ以上のワード文字と一致します。最初の前方参照¥1は、最初の文字グループと同じサブ一致と一致します。(["*$]).2番目の前方参照¥2は、2番目の文字グループと同じサブ一致(["*$])と一致します。3番目の前方参照¥1は最初の前方参照と同じで、最初の文字グループと同じサブ一致と一致します。

この例は、"foo"foo"*bar*bar*、および$baz$baz$,という文字列と一致しますが、"foo$foo""foo*bar"とは一致しません。

置換文字列での前方参照

「文字列の検索と置換」関数を正規表現モードで使用した場合は、置換文字列入力で、検索文字列入力のサブ一致を前方参照できます。最初の部分一致を参照するには$1、2番目の部分一致を参照するには$2というように使用します。これらの特殊文字は、「文字列の検索と置換」関数の置換文字列入力でのみ使用できます。これらの特殊文字を使用することで、指定文字列を指定サブ一致の前または後に挿入することができます。以下の例について検証します。

入力文字列: $value "TRUE"TRUE" *NULL検索文字列: (["*$])(\w+)\1\2\1置換文字列: $1$2value$1結果文字列: $value "TRUEvalue" *NULL

この例では、置換文字列内の$1前方参照は、検索文字列内の最初のサブ一致を参照します。同様に、$2前方参照は、search string内の2番目のサブ一致を参照します。