1 つの正規表現コマンドですべてのパターンを組み合わせる方法は? 方法はありますか?
例: 変数が「a」で、複数のパターンについて「a」をチェックする必要がある場合、1 つのコマンドでこれを行うにはどうすればよいですか? 私は何かを試しました
set a abc
regexp ".abc | abc. | .abc." $a
これは、出力として 1 を返しました。しかし、私のパターンにはすべて「。」があるため、ゼロにする必要があります。$a と一致しない
スペース文字が正規表現のスペース文字を表しているため、失敗しています。だからあなたの正規表現:
regexp ".abc | abc. | .abc." $a
を探している:
"anything" followed by "a" then "b" then "c" then " "
OR
" " followed by "a" then "b" then "c" then "anything" then " "
OR
" " followed by "anything" then "a" then "b" then "c" then "anything"
明らかに、文字列「abc」は、次の理由で上記のパターンのいずれとも一致しません。
おそらくあなたが望むのは次のようなものです:
regexp ".abc|abc.|.abc." $a
しかし、上記はまだ「abc」と一致しません。「c」の後に余分な文字があるため、「abcd」と一致します。「abc」にも一致させるには、次のものが必要です。
regexp ".abc|abc.|.abc.|abc" $a
しかし、これは小さな問題だと思います。問題の核心は、正規表現も空白を検索対象として解釈することに気付いていないことです。
非常に簡潔で正確な POSIX 正規表現リファレンスについては、OpenBSD のre_format(7) man ページをお勧めします。
検索パターンごとに括弧を使用すると機能します
regexp "(.abc)|(abc.)|(.abc.)" $a