0

我不理解正则表达式,因为它看起来很困难......所以我发现它只是找到带点等的最后一个单词。

$content='Nullam quis risus eget urna mollis ornare vel eu leo.';
$pattern = '/[^ ]*$/';
preg_match($pattern, $content, $result);
echo $result[0];

我得到“狮子座”。

我怎样才能得到没有点或问号的“leo”?

谢谢你。

4

3 回答 3

1

$您可以使用锚点和前瞻来获取最后一个单词:

$pattern = '~[a-z]+(?=[^a-z]*$)~i';

解释:

~           # pattern delimiter
 [a-z]+     # all characters between a and z (included) one or more times
 (?=        # open a lookahead. Means followed by:
    [^a-z]* # all characters that are not letters zero or more times
    $       # until the end of the string
 )          # close the lookahead
~           # pattern delimiter
i           # case insensitive ( [a-z] => [a-zA-Z] and [^a-z] => [^a-zA-Z])

对于您的正则表达式尝试,我建议您使用这个特定于 php 的在线工具。

于 2013-07-11T00:15:22.200 回答
0

您可以使用 rubular.com 来学习和测试正则表达式。他们还提供了一个很好的备忘单=)。

你会用 : \b([a-zA-Z]*)[\W]$ 抓住你的话

使用此正则表达式,您也将匹配该点。要仅提取“leo”,您需要了解捕获组:http ://www.regular-expressions.info/named.html

于 2013-07-10T20:04:33.453 回答
0

不知何故,我用模式解决了这个问题:'/[\p{L}\d]+(?=[^az]*$)/u'。也许有人知道如何在字符串中找到第一个和最后一个单词并将它们放入带有 preg_match 的数组中?

于 2013-07-11T09:09:47.950 回答