1

別の短い正規表現の問題があります。

基本的に私はそのような文字列を持っています:

cn=WSG-AP-LO-COMMON-SITE-APPS,ou=ZFD,ou=SVC,ou=IGH

私はWSG-AP-LO-COMMON-SITE-APPSその文字列からだけを取得しようとしています。

私はこのようなことを試みています:

preg_match('/[cn=.]+.*[^,.*]+$/', $info[0]['groupmembership'][0], $matches);

print_r($matches); どちらが返されますか:

Array
(
    [0] => cn=WSG-AP-LO-COMMON-SITE-APPS,ou=ZFD,ou=SVC,ou=IGH,ou=WM,ou=SWQ,o=HEALTH
)
4

4 に答える 4

3

これを試して:

preg_match("/cn=([^,]+)/", $string, $match); 
$match[1]; //WSG-AP-LO-COMMON-SITE-APPS
于 2012-05-08T02:43:26.747 に答える
3

単純に区切られた文字列と同様に、これは区切り文字で分割することで最も簡単に実行できます。最初はコンマ、次に:で分割します=

$parts = explode(",", "cn=WSG-AP-LO-COMMON-SITE-APPS,ou=ZFD,ou=SVC,ou=IGH");
$cn = $parts[0];
list($component, $value) = explode($cn);
echo $value;

そして、本当に最初の部分だけが必要な場合は、別の部分で短くすることができますlist()

list($cn) = explode(",", "cn=WSG-AP-LO-COMMON-SITE-APPS,ou=ZFD,ou=SVC,ou=IGH");
list($component, $value) = explode("=", $cn);
echo $value;

しかし、本当に正規表現でそれを実行したい場合は、次のように機能するはずです。

preg_match('/cn=([^,]+)/',  "cn=WSG-AP-LO-COMMON-SITE-APPS,ou=ZFD,ou=SVC,ou=IGH", $matches);
var_dump($matches);

array(2) {
  [0]=>
  string(29) "cn=WSG-AP-LO-COMMON-SITE-APPS"
  [1]=>
  string(26) "WSG-AP-LO-COMMON-SITE-APPS"
}

([^,]+),次の次までのすべてに一致しますcn=

于 2012-05-08T02:43:29.303 に答える
1

これは、cn=以降のコンマが表示されるまでのすべてに一致します。

preg_match('/cn=([^,]+)/i', 'cn=WSG-AP-LO-COMMON-SITE-APPS,ou=ZFD,ou=SVC,ou=IGH', $result);

var_dump($result);

出力:

Array
(
    [0] => cn=WSG-AP-LO-COMMON-SITE-APPS
    [1] => WSG-AP-LO-COMMON-SITE-APPS
)
于 2012-05-08T02:44:27.260 に答える
0

PowerShellを使用することをお許しください。ただし、正規表現は同じである必要があります。

([Regex]::Matches("cn=WSG-AP-LO-COMMON-SITE-APPS,ou=ZFD,ou=SVC,ou=IGH", "cn=([^,]+)"))[0].Groups[1]
于 2012-05-08T02:57:57.957 に答える