有另一个短的正则表达式问题。
基本上我有一个像这样的字符串:
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
)
答案 0 :(得分:3)
试试这个:
preg_match("/cn=([^,]+)/", $string, $match);
$match[1]; //WSG-AP-LO-COMMON-SITE-APPS
答案 1 :(得分: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=
的所有内容。
答案 2 :(得分: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
)
答案 3 :(得分:0)
请原谅我使用PowerShell,但RegEx应该是相同的,我认为:
([Regex]::Matches("cn=WSG-AP-LO-COMMON-SITE-APPS,ou=ZFD,ou=SVC,ou=IGH", "cn=([^,]+)"))[0].Groups[1]