0

1 つの正規表現コマンドですべてのパターンを組み合わせる方法は? 方法はありますか?

例: 変数が「a」で、複数のパターンについて「a」をチェックする必要がある場合、1 つのコマンドでこれを行うにはどうすればよいですか? 私は何かを試しました

    set a abc
    regexp ".abc | abc. | .abc." $a

これは、出力として 1 を返しました。しかし、私のパターンにはすべて「。」があるため、ゼロにする必要があります。$a と一致しない

4

3 に答える 3

2

スペース文字が正規表現のスペース文字を表しているため、失敗しています。だからあなたの正規表現:

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」は、次の理由で上記のパターンのいずれとも一致しません。

  1. 3 つの条件すべてで必要なスペース文字が (適切な場所に) 含まれていません。
  2. パターン 1 と 2 に一致する「a」の前に文字がなく、パターン 2 と 3 に一致する「c」の後に文字がない

おそらくあなたが望むのは次のようなものです:

regexp ".abc|abc.|.abc." $a

しかし、上記はまだ「abc」と一致しません。「c」の後に余分な文字があるため、「abcd」と一致します。「abc」にも一致させるには、次のものが必要です。

regexp ".abc|abc.|.abc.|abc" $a

しかし、これは小さな問題だと思います。問題の核心は、正規表現も空白を検索対象として解釈することに気付いていないことです。

于 2012-12-06T07:21:16.457 に答える
0

非常に簡潔で正確な POSIX 正規表現リファレンスについては、OpenBSD のre_format(7) man ページをお勧めします。

于 2012-12-06T05:39:00.703 に答える
0

検索パターンごとに括弧を使用すると機能します

    regexp "(.abc)|(abc.)|(.abc.)" $a
于 2012-12-05T18:39:57.697 に答える