2016-12-21 8 views
1

わかりましたので、私は正規表現に新しいです、または少なくとも実際にそれらを書くために、しかし、ここで私が持っているものです。Regexは非キャプチャグループを返しますか?

文字列:

LDAP://CN=Doe\, John,OU=Users,DC=my,DC=domain 

正規表現(予想通りそれが動作していません) :

(?:LDAP://CN=)([a-zA-Z]+\\?[,\s]?\s?[a-zA-Z]+) 

グループが一致:

LDAP://CN=Doe\, Joe 
Doe\, John 

キャプチャGROをアップ:私は返すようにしたいどのような

LDAP://CN=Doe\, John 

Doe, John 

を(明らかに正しくない)私の理解では、私は私が撮影しグループのため?:が含まれている場合、それは戻らないだろうという印象の下にありましたそれは試合で。同様に、名前の真ん中にある,の前に\を返すことは望ましくありません。実際に返された結果の文字を除外する方法はわかりません。誰かがその問題について何か光を照らすことができる?

[更新]私は結果が(ところで私が使用しているのPowerShell)次の操作を行っている得ることができた

$qryResult = "LDAP://CN=Doe\, John,OU=Users,DC=my,DC=domain" 
[regex]$re = "LDAP://CN=(.*?),OU" 
$result = $re.Match($qryResult) 
(($result.Value -replace "LDAP://CN=","") -replace "\\","") -replace ",OU","" 

しかし、それは素敵な最初から正規表現を使用するようになりそのようにテキストの置換を終了します。それが可能だ?

+0

1回のマッチ操作で不連続なテキストを一致させることはできません。どのツール/言語を使用していますか? –

+0

私はあなたがマッチした後に '' \ ''を削除する必要があるという点で運転しています。'LDAP:// CN =(。*?)、OU ='またはあなたの正規表現でグループ1のcapured値にしてください。 ? '非キャプチャグループを示す: –

+0

はWiktorStribiż[email protected]私はあなたの他の質問に答えるためにはPerl 5の正規表現 –

答えて

1
これにあなたのPowerShellを変更

$qryResult = "LDAP://CN=Doe\, John,OU=Users,DC=my,DC=domain" 
[regex]$re = "LDAP://CN=(.*?),OU" 
$result = $re.Match($qryResult).Groups[1] 
($result.Value -replace "LDAP://CN=","") -replace "\\","" 

それが唯一の第二グループ(キャプチャグループ)対象となります:あなたは、単一の-replaceで必要な結果を得ることができます.Groups[1]

+0

私は1つの答えしかチェックできないので、私は両方をチェックします答えは完璧なのでコメント。ありがとうございました! –

+0

@ user7327089:それを行う方法の1つは、両方ともupvoteです。 –

+0

OPは今アップアップできません。私は、最も効果的な答えを受け入れることをお勧めします。 –

1

を:

PS> $rx = "LDAP://CN=(\p{L}+)(?:\\?,)?(\s*\p{L}+)?,OU=.*" 
PS> $res = $qryResult -replace $rx, '$1$2' 
PS> $res 
Doe John 

詳細

  • LDAP://CN= - リテラル文字列
  • (\p{L}+) - オプション\のオプションのシーケンスとコンマ
  • (\s*\p{L}+)? - - 0+空白をキャプチャするオプションのグループ2グループ1は1+文字
  • (?:\\?,)?をキャプチャおよび1 +の文字
  • ,OU=.* - ,OU=リテラルcharシーケンスと、改行記号以外の0以上の文字。
+0

私は1つの答えだけをチェックすることができるので、答えが完璧であるので、私はコメントで両方を 'チェック'するつもりです。ありがとうございました! –

+0

回答を受け入れることによって、あなたは他人にその質問が対処されたことを知らせることもできます。他の答えを受け入れてください、最初に投稿されました。 –

関連する問題