拆分字符串的正则表达式问题


regex issue on splitting a string

有另一个简短的正则表达式问题。

基本上我有这样的字符串:

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
)

与任何简单分隔的字符串一样,这最容易通过在分隔符上拆分来完成:首先是逗号,然后在=上:

$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=之后的下一个,匹配。

试试这个:

preg_match("/cn=([^,]+)/", $string, $match); 
$match[1]; //WSG-AP-LO-COMMON-SITE-APPS

这将匹配 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
)

原谅我使用PowerShell,但正则表达式应该是相同的,我认为:

([Regex]::Matches("cn=WSG-AP-LO-COMMON-SITE-APPS,ou=ZFD,ou=SVC,ou=IGH", "cn=([^,]+)"))[0].Groups[1]