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

时间:2012-05-08 02:40:53

标签: php regex

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

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

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 个答案:

答案 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]