0

AD の識別名の値は通常、次の形式です。

CN=lastName\,firstName,OU=Users - XYZ,OU=Users-Test Place,OU=UsersAll,DC=Dom1,DC=Dom2

正規表現を使用して解析し、次の値を取得したいと思います

CN=lastName\, firstName
OU=Users - XYZ
OU=Users-Test Place
OU=UsersAll
DC=Dom1
DC=Dom2

パターン "\w+=\w+" は役に立ちませんでした。

問題は見えますが、解決策がわかりません。

ご協力いただきありがとうございます。

4

1 に答える 1

2

識別名の構文は RFC 4514 (RFC 2253 を置き換える) で規定されており、正規表現で完全に解析できるわけではありません。OpenLDAP には、価値のある解析と検証を行ういくつかのライブラリ関数が含まれています。ただし、簡単な正規表現が必要な場合は、次の Posix ERE を使用でき([^\,]|\\.)*ます(?:[^\,]|\\.)*

これは、「 と 以外の任意の文字列に一致,し、場合によってはと の任意の 1 文字\のペアも含む」ことを意味します。\これは実際の LDAP 仕様のスーパーセットであり、\その後に 16 進数またはいくつかの特殊文字の 1 つ以外が続くことを許可しないため、多くの無効な DN コンポーネントを受け入れますが、すべての有効な DN コンポーネントを受け入れる必要があります。そして、DN コンポーネントを区切るコンマを飲み込むことは決してないと私は信じています。

これは、grep を使用した bash での簡単なテストです。

$ echo 'CN=lastName\, firstName,OU=Users - XYZ,OU=Users-Test Place,OU=UsersAll,DC=Dom1,DC=Dom2' |
> grep -oE '([^\,]|\\.)*'
CN=lastName\, firstName
OU=Users - XYZ
OU=Users-Test Place
OU=UsersAll
DC=Dom1
DC=Dom2
于 2012-09-14T00:46:20.697 に答える