全て、
正規表現をもう少し詳しく調べてみます。 単純な Contains() を使用して希望するものを実現できますが、正規表現を使用すると同等のものを確認しようとします。
私が持っている正規表現は期待どおりに機能しません。誰かが同等の正規表現を教えて、私が間違っていることを説明してもらえますか?
Clear Log(); Clear Globals();
dt = Open( "$SAMPLE_DATA/Cities.jmp" );
dt:city[2] = "aLBUQUERQUE";
CityList = dt:City << Get Values;
Des = list();
for(i = 1 , i <= N Items(CityList),i++,
If(!IsMissing(Regex(Char(CityList[i]),"^a|A[LB]*")),
Insert Into(Des,CityList[i]);
);
);
/*for(i = 1 , i <= N Items(CityList) , i++,
If(Contains(CityList[i],"aLB")|Contains(CityList[i],"ALB"),
Insert Into(Des,CityList[i]);
);
);*/
Show(Des);
//Close All(Data Tables,"No Save");今あなたはマッチングしていますまた文字列の先頭に「a」がある (「^a」)また「A」の後にゼロ個以上の文字「L」または「B」が続きます (「A[LB]*」)。いくつかのメモ:
- 前後に括弧はありません。一致するのは、「|」の前後の文字列全体です。したがって、文字列が「a」で始まる場合、その文字列は完了し、他の文字列には一致しません。
- 角括弧は、その中の任意の文字と一致することを意味します。
- アスタリスクは、先行する文字またはグループの 0 個以上と一致することを意味します。この場合は、角括弧内のグループを意味します。
- 両方とも、 or の右側は、文字列内の任意の場所 (先頭だけでなく) のいずれかと一致します。
- あ
- アル
- AB
- ALB
- ABL
- ALLLLLLLLBBLLBBBBLLBLLB
- 文字列 aA は、実際には Regex 関数の 2 つの異なる一致になります。
おそらくこれが必要です: "^(a|A)LB.*$" またはこれ: "^[aA]LB.*$"
- 文字列の先頭から開始して、a または A に一致し、その後に続きます。
- 文字 LB の順に、その後に続きます
- 0 個以上の任意の文字。ピリオドは任意の文字 (.*) に続きます。
- 文字列の終わり。これはおそらく必要ありません。
Des = {"ALBANY", "aLBUQUERQUE"};
チェックアウトregexr.com 、コードのチェックに役立つだけでなく、左側に優れた「リファレンス」セクションと「チートシート」セクションがあります。私はほとんどの場合、複数行をオンにします (右上のフラグ)。
文字列内のどこにでも一致する可能性があることを明確にするために編集されました。