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 应该是相同的:

([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 回答