获取文本的最后一个单词,其中只包含php中的字母

时间:2014-01-28 09:40:11

标签: php regex

有人可以帮助我从仅包含字母的文本中获取最后一个单词。

我应该使用正则表达式,我认为......

例如:

100 r St Lazare, 75009 PARIS

我需要PARIS

这个词

5 个答案:

答案 0 :(得分:2)

如果您需要正则表达式解决方案,可以使用

([a-z]+)$|^.*\b([a-z]+)\b

作为你的正则表达式。
(如果您正在处理非ascii字符,请再次将[a-z]替换为[^\s\d] Demo @ regex101

<小时/> 基本上有两种情况:

  1. 单词仅包含字母数字。所以不会有像Im1Word这样的词 如果是这种情况,我会去

    /([a-z]+)$|([a-z]+)[^a-z]+$/i
    

    这将匹配PARIS中的100 r St Lazare, 75009 PARIS和 另一个例子,它将匹配test中的just a test 7509 请参阅demo @ regex101gm标记只是为了匹配多行,因此您可以看到它匹配的所有内容。

  2. 单词由字母组成。可能会有像Im1Word这样的词 上面的正则表达式是不够的,我会在代码中使用更多逻辑来执行此操作:

    $input = "100 r St Lazare, 75009 PARIS 123 abc123 123";
    $words = explode(' ', $input);
    
    for($i = count($words)-1; $i >= 0; $i--) {
        if(preg_match("/\b[a-z]+\b/i",$words[$i]) == 1) {
            echo "Match: " . $words[$i];
            break;
        }
    }
    

    基本上,我们用空格分割字符串,并从结尾到开头迭代每个元素。每当元素与\b[a-z]+\b匹配时,我们发现最后一个单词仅由字母组成 Example @ ideone

  3. 现在,如果您有任何非ascii字符,则上述两种解决方案都将失败 您需要更改两个正则表达式:

    1. ([^\s\d]+)$|([^\s\d]+)[\s\d]+$
    2. "/\b[^\s\d]+\b/i"
    3. 这样你也可以匹配非ascii词。

答案 1 :(得分:1)

您可以尝试:

$input = '100 r St Lazare, 75009 PARIS';
$words = explode(' ', $input);
$last  = array_pop($words);

$last  = $words[count($words) - 1];

答案 2 :(得分:1)

我想建议以下版本,但它仍然不适用于所有情况:

$input = '100 r St Lazare, 75009 PARIS 345'; // pass, returns "PARIS"
$input = '100 r St Lazare, 75009 PARIS';     // pass, returns "PARIS"
$input = 'this just a Ðöæ 75009';            // pass, returns "Ðöæ"
$input = 'this just a Ðöæ';                  // pass, returns "Ðöæ"
$input = 'this just a tes1t 75009';          // fail, returns "t"

$output = array();
preg_match( '/([^\s\d]+)[\s\d]*$/i', $input, $output );
$lastWordThatConsistsOnlyOfLetters = array_pop( $output );

var_dump( $lastWordThatConsistsOnlyOfLetters );

(@ naveengoyal你发布的测试字符串很难......)

答案 3 :(得分:0)

正则表达式和explode是可能的解决方案,但是,在我看来,最快的一个是substr

$last = substr($words, strrpos($words, " ")+1);

strrpos返回最后一个空格的偏移量。这就是你所需要的一切。

答案 4 :(得分:-1)

你可以尝试

$text = "100 r St Lazare, 75009 PARIS";
$exploded = explode(" ",$text);
echo $exploded[count($exploded)-1]