Php 正则表达式将全名与逗号或空格匹配

Php 正则表达式将全名与逗号或空格匹配,php,regex,commonmark,Php,Regex,Commonmark,我正在使用CommonMark,我已经创建了一个“@title”解析器,当找到@title时,它将返回一个链接。然而,我正在调整它,以链接全名而不是用户名。以下是我目前拥有的: $cursor->match('/^\w+,(.*)\s/'); 但是,这似乎错误地捕获了名称,并链接了另一个名称的开头(见下文): 有人知道我可以修改什么来匹配用逗号和/或空格分隔的全名吗?我不擅长写正则表达式 提前谢谢你的帮助 编辑: 以下是应该匹配的内容: (一个名称最多只能包含3个单词,最少只能包含2个

我正在使用CommonMark,我已经创建了一个“@title”解析器,当找到@title时,它将返回一个链接。然而,我正在调整它,以链接全名而不是用户名。以下是我目前拥有的:

$cursor->match('/^\w+,(.*)\s/');
但是,这似乎错误地捕获了名称,并链接了另一个名称的开头(见下文):

有人知道我可以修改什么来匹配用逗号和/或空格分隔的全名吗?我不擅长写正则表达式

提前谢谢你的帮助

编辑:

以下是应该匹配的内容:

(一个名称最多只能包含3个单词,最少只能包含2个单词)

  • 鲍曼,史蒂夫
  • 史蒂夫·鲍曼
  • Doe,Mary Sue
  • 玛丽·苏·多伊
带有逗号的姓氏只能是一个单词

不应匹配的内容:

  • 史蒂夫
  • 鲍曼
  • 玛丽
  • 母鹿
正则表达式需要匹配整个名称,而不是单个名称

这是
match
方法背后的公共标记代码:

if (!preg_match($regex, $subject, $matches, PREG_OFFSET_CAPTURE)) {
    return;
}
这将导致:

if (!preg_match('/^\w+,(.*)\s/', "Bauman, Steve", $matches, PREG_OFFSET_CAPTURE)) {
    return;
}
给你

<?php
$string = <<<EOS
something @name, bla bla bla @name.surname something else
Lorem ipsum @o'brien 
EOS;

$matches = [];
preg_match_all('/@[^\s,]+/', $string, $matches);
var_dump($matches);
给你

<?php
$string = <<<EOS
something @name, bla bla bla @name.surname something else
Lorem ipsum @o'brien 
EOS;

$matches = [];
preg_match_all('/@[^\s,]+/', $string, $matches);
var_dump($matches);

根据您的新规则,匹配一个包含2个或3个单词的名称,并用空格()或逗号(,)分隔


根据您的新规则,匹配一个包含2个或3个单词且应以空格()或逗号(,)分隔的名称


正则表达式的确切规则是什么?如果您添加了一个示例输入和一组应该匹配和不应该匹配的结果,那么会简单得多。您能试一下吗:^\w+|,|\s |\wHi@degant,很抱歉,我现在正在编辑问题。没问题,因此根据您更新的规则,名称将是两个独立的单词。这总是真的吗?如果一个名字有三个部分呢?@degant shot!我忘记了一个由三部分组成的名称(我们组织中有),我已经更新了我的规则,谢谢!正则表达式的确切规则是什么?如果您添加了一个示例输入和一组应该匹配和不应该匹配的结果,那么会简单得多。您能试一下吗:^\w+|,|\s |\wHi@degant,很抱歉,我现在正在编辑问题。没问题,因此根据您更新的规则,名称将是两个独立的单词。这总是真的吗?如果一个名字有三个部分呢?@degant shot!我忘记了一个由三部分组成的名称(我们组织中有),我已经更新了我的规则,谢谢!不幸的是,这不起作用,例如,将“@Bauman,Steve”结果插入到包含“@Bauman”而不是“@Bauman,Steve”的数组中。不幸的是,这不起作用,例如,将“@Bauman,Steve”结果插入到包含“@Bauman”而不是“@Bauman,Steve”的数组中没有问题。很高兴我能帮忙!没问题。很高兴我能帮忙!