有另一个简短的正则表达式问题。
基本上我有这样的字符串:
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]