Regex获得“Aardal,Prof.dr.ir.K.I。(Karen)”的第一名

时间:2011-03-18 11:22:03

标签: php regex

任何人都可以帮我写一个正则表达式来过滤字符串中的括号之间的名称,如下所示:Aardal, Prof.dr.ir. K.I. (Karen)

我试过

preg_match('~[^/]([^/])~', $fullname, $matches);
var_dump($matches);

但回报是

array
  0 => string 'Aa' (length=2)
  1 => string 'a' (length=1)

谢谢你们!

3 个答案:

答案 0 :(得分:6)

  1. 您可以跳过(
  2. 以外的任何字符
  3. 然后匹配(以及)
  4. 以外的任何字符
  5. 然后匹配)
  6. {li}在()之间现在是捕获组“名称”

    正则表达式:

    [^\(]*\((?<name>[^\)]+)\)
    

    使用工具Expresso进行测试。这个正则表达式匹配两组:

    1. 整个字符串:“Aardal,Prof.dr.ir。K.I。(Karen)”
    2. 指定群组'name':“Karen”
    3. 注意:

      • (?<name>...)是指定的群组
      • 要匹配(等,我们必须用斜杠来逃避它。

答案 1 :(得分:0)

一些标准字符串函数也会这样做:

function extractName($subject)
{
    $openIndex = strpos($subject, '(');
    if ($openIndex !== false)
    {
        $closeIndex = strpos(substr($subject, $openIndex + 1), ')');
        if ($closeIndex !== false)
            return substr($subject, $openIndex + 1, $closeIndex);
    }
    else
        return '';
}

echo extractName('Aardal, Prof.dr.ir. K.I. (Karen)');

答案 2 :(得分:0)

尝试关注一个

.*\((.*)\)

然后捕获第一组值,它将匹配以下内容:

Aardal,Prof.dr.ir。 K.I. (的卡伦