
誰でも角かっこをエスケープする場合は、次の2つのコマンドの違いを伝えたり、疑いを解消したりする可能性のある文書を参照できますか?
string=abcABC123ABCabc
$ echo `expr match "$string" 'abc[A-Z]*.2'` #Result is 8, the count of matched characters
$ echo `expr match "$string" '\(abc[A-Z]*.2\)'` #Result is abcABC12, the matched characters
ここで括弧をエスケープするという実際の意味は何ですか\(...\)
?
答え1
GNUを参照expr
(coreutilsの一部)と\(
タグ\)
付け中グループに記録されているように16.4.1 文字列式:
一致が成功し、正規表現が
‘\(’
andを使用すると、‘\)’
式はサブ式と一致する文字列部分を返します。それ以外の場合は、一致する文字数が返されます。
ドキュメントリファレンス3正規表現もっと学ぶgrep
。これ通事論正規表現の数は次のとおりです。ファイルに書き込むPOSIXでは:
完全一致が最も左の一致のうち最も長いものと一致するように、各サブパターンは左から右にできるだけ長い文字列と一致する必要があります。これを行うには、空の文字列をまったく一致しないよりも長いものとして扱う必要があります。たとえば、
"\(.*\).*"
BREと一致すると、サブ式は"abcdef"になり、BREを "bc"と一致すると、サブ式は空の文字"abcdef"
列です。"(\1)"
"\(a*\)*"
"(\1)"
POSIXexpr
演算子を含む正規表現は次のとおりです:
。
expr1 : expr2
しかし:
文字列パラメータの使用
length
、サブストリング、索引またはmatch
指定されていない結果が生成されます。
それで、この特別な使い方は拡張のようです。
POSIX の使用法は、:
リソースのセクションで詳しく説明されています。一致表現;これマッチここに示されている演算子はに対応します:
が、場所に変更プレフィックス:
POSIXで使用される演算子(以前は2つの演算子)中尉(2つのオペランド間)。
グループとして、長さなどで見ることができる。拡大する(特定のユーティリティでは不可能な非標準機能を提供)または単に非標準(他の方法で実行できる機能を実行する互換性のない方法)これはハイブリッドです。 POSIX シェルは同様の機能を提供します。長さなど、該当する項目に記載されているようにパラメータの置換つまり、${#parameter}
。しかし、サブストリングそして索引明白で正確な等価物はありません。 (構文は異なりますが、グループ全体は以下に基づいています。awk
)。
答え2
パターンにサブ式が含まれている場合、一致\(...\)
する文字列が返されます。この行動はPOSIXで指定:
または、パターンに正規表現サブ式 "[\(...\)]" が 1 つ以上含まれている場合は、逆参照式 "\1" と一致する文字列を返す必要があります。逆参照式 "\1" が一致しない場合は、空の文字列を返す必要があります。
コマンドを次のように変更する必要があります。
expr "$string" : '\(abc[A-Z]*.2\)'
すべてのPOSIX互換環境で動作するようにしてくださいexpr
。目的はmatch
不特定です。
答え3
バックスラッシュ括弧は\(...\)
「キャプチャグループ」を作成します。expr match
最初のキャプチャグループを返すようです。