regex 获取包含字母和非字母的字符串中最后出现的字母

j9per5c4  于 12个月前  发布在  其他
关注(0)|答案(4)|浏览(125)

我有一个字符串如下。

$string = '2346#$ABSC$%#@#234567';

我想要这个字符串中最后一个不是数字或特殊字符的字符。它可能只是一个字母(在字母或字母)。
在这种情况下,我只需要这个字符串中的“C”。
我试过这个公式:

substr($string, -1);
zfciruhq

zfciruhq1#

您应该使用类似preg_match()的东西来查看正则表达式
这样的表达式将匹配:

/([a-z])[^a-z]*$/i

意思是:

  • ([a-z])捕获一个a-z字符(末尾的i使其不区分大小写)
  • [^a-z]*$后跟0个或多个非a-z字符,直到字符串结束

参见an example

efzxgjgh

efzxgjgh2#

这应该对你有用:
(Here我只是把除了a-zA-Z之外的所有东西都替换为一个空字符串。在此之后,我只是访问最后一个字符)

<?php

    $string = '2346#$ABSC$%#@#234567';
    $string = preg_replace("/[^a-zA-Z]/", "", $string);
    echo $string[strlen($string)-1];

?>

产出:

C
unhi4e5o

unhi4e5o3#

正确的regex是:([a-z])[^a-z]*$

f3temu5u

f3temu5u4#

正如这个答案所展示的那样,使用正则表达式模式来隔离最后一个字母,后面只有零个或多个非字母,然后是字符串的结尾。
不需要捕获组。
代码:(Demo

$string = '2346#$ABSC$%#@#234567';

echo preg_match('/[a-z](?=[^a-z]*$)/i', $string, $m) ? $m[0] : 'not found';
// outputs: C

相关问题