現在、次の正規表現を使用して文字列をグループに分割しています。
^([a-zA-Z0-9]*)(\[([a-zA-Z0-9=]*)\]){0,1}@([a-zA-Z0-9]*)$
Pty[R=4]@ID
4つのグループがあります。
1) Pty
2) [R=4]
3) R=4
4) ID
しかし、3つのグループだけが必要です。
1) Pty
2) R=4
3) ID
この正規表現は、両方のグループをインポートするためにPty @ IDも許可できる必要があります。
1) Pty
2) ID
この目標をどのように達成できますか?
答え1
ツールを指定していないので、perl
次の例を使用します。
$ echo Pty[R=4]@ID | perl -nle '
print "$1\n$2\n$3\n$4"
if /^([a-zA-Z0-9]*)(\[([a-zA-Z0-9=]*)\]){0,1}@([a-zA-Z0-9]*)$/
'
Pty
[R=4]
R=4
ID
$ echo Pty@ID | perl -nle '
print "$1\n$2\n$3\n$4"
if /^([a-zA-Z0-9]*)(\[([a-zA-Z0-9=]*)\]){0,1}@([a-zA-Z0-9]*)$/
'
Pty
ID
正規表現キャプチャグループでは、次のことができます。逆参照以前の一致を取得します。では、、、...、 をperl
使用できます。$1
$2
$n
あなたの場合は、次のものを使用できます非キャプチャグループ[R=4]
捕まらないようにするには:
$ echo Pty[R=4]@ID |
perl -nle '
print "$1\n$2\n$3"
if /^([a-zA-Z0-9]*)(?:\[([a-zA-Z0-9=]*)\]){0,1}@([a-zA-Z0-9]*)$/
'
Pty
R=4
ID
php
コメントで述べたように、以下を使用できます。PHPの逆参照文法\1
または\g1
または\g{1}
。