Php 使用正则表达式筛选姓名和姓氏

Php 使用正则表达式筛选姓名和姓氏,php,regex,Php,Regex,在我的PHP脚本中,我有一个如下所示的变量: $names = '<a href="%URL$%" rel="tag">Name Surname</a>, <a href="%URL$%" rel="tag">Name Surname</a>, <a href="%URL$%" rel="tag">Name Surname</a>'; $names=','; 是否可以筛选$names以获得此结果 $names = '&l

在我的PHP脚本中,我有一个如下所示的变量:

$names = '<a href="%URL$%" rel="tag">Name Surname</a>, <a href="%URL$%" rel="tag">Name Surname</a>, <a href="%URL$%" rel="tag">Name Surname</a>';
$names=',';
是否可以筛选$names以获得此结果

$names = '<a href="%URL$%" rel="tag">N. Surname</a>, <a href="%URL$%" rel="tag">N. Surname</a>, <a href="%URL$%" rel="tag">N. Surname</a>';
$names=',';

非常简短的回答:使用HTML解析器(比如)


正则表达式和HTML只有在您确定只需要分离真正可预测的代码字符串时才起作用。

您可以使用
preg\u replace\u callback

$names = preg_replace_callback(
             '/(<a[^>]*>)(\w+)( \w+</a>)',
             function($matches) {
                 return $matches[1] . substr($matches[2], 0, 1) . "." . $matches[3];
             },
             $names
         );
$names=preg\u replace\u回调(
“/(]*>)(\w+(\w+)”,
函数($matches){
返回$matches[1]。substr($matches[2],0,1)。“..$matches[3];
},
$names
);

是,使用。正则表达式是。你说的过滤器是什么意思?你只想把“名字”换成“N.”。还有其他要求吗?是的,我显然有不同的名字,我只想取第一个字符,后跟一个点。例:约翰·史密斯,马克·吐温=>J·史密斯,M·吐温