在php中如何检查字符串是否以标点符号结尾?

在php中如何检查字符串是否以标点符号结尾?,php,regex,Php,Regex,我正在逐行解析一些文本,如果给定的行以任何标点或数字结尾,我希望布尔值返回true 正则表达式是最好的方法,还是应该使用字符数组进行迭代以匹配?感觉阵列太大太昂贵了 如果这真的是一个好方法,有人能帮我用正则表达式吗 function ends_with_punctuation_or_num($string){ // check if the string ends with punctuation or a number if (/* TODO */) return

我正在逐行解析一些文本,如果给定的行以任何标点或数字结尾,我希望布尔值返回true

正则表达式是最好的方法,还是应该使用字符数组进行迭代以匹配?感觉阵列太大太昂贵了

如果这真的是一个好方法,有人能帮我用正则表达式吗

function ends_with_punctuation_or_num($string){
   // check if the string ends with punctuation or a number
    if (/* TODO */)
        return true;
    else
        return false;
}

将其放入您的if支票:

preg_match("/[0-9.!?,;:]$/", $string)
它将匹配字符串结尾(
$
)之前的数字或任何给定标点字符。将您认为匹配的任何其他标点符号添加到字符类中(方括号)。

echo substr(“abcdef”,-1);//返回“f”


您可以使用substr函数或utf-8mb\u substr

$last = substr($string, -1);

if($last == '.' OR is_numeric($last)) {]
但是如果你使用UTF8字符串,我建议你像这样使用它

mb_internal_encoding('utf-8');
$last = mb_substr($string, -1);
if($last == '.' OR is_numeric($last)) {}

标点符号的unicode属性是
\p{p}
\p{标点符号}
对于它是
\pN
的数字

在php中,您可以使用:

preg_match('/[\p{P}\p{N}]$/u', $string);
如果字符串以标点符号或数字结尾,则返回true


看一看。

我不确定是否会使用正则表达式来执行此操作。这只是个人喜好,但正则表达式似乎不必要,可读性也较差(它也较慢,但这在这里可能并不重要)。我宁愿将我要查找的任何字符放入字符串中并比较:

$chars = '.,;\'"0123456789';
$last = substr($string, -1);

if(strpbrk($last, $chars) !== false) {}
显然,使用
mb_substring()
代替Unicode


也可以使用
is\u numeric()
而不是在字符串中输入数字。但我发现这更简单,可读性更强,以后更容易修改。

因为他指定了数字或标点符号。没有空格或任何东西。所以我想他更愿意明确地说出要匹配的字符。好的,我给你这个,这确实符合要求。我怀疑“非阿尔法角色”是OP真正想要的,但那应该由他说+1@m.buettner这太棒了,我怎么也包括“[”,“]”,“@dcoffey3296要知道他们做的事情不同。Mine断言最后一个字符不在黑名单
a-z
,m.buettner断言它在白名单
0-9.!?,;:。请确保您确切知道要确定的内容。顺便说一句:您甚至不需要if/else,只需“return preg_match(/*regex*/)==1;@dcoffey3296:如果您想将其设置为unicode-and i18n-save(例如阿拉伯语),您应该使用此选项!合理的方法。只需将strpos($chars,$last)更改为strpbrk($last,$chars)。如果您在方法中检查布尔表达式,请不要在单独的分支中返回
true
false
。只需
返回(表达式)
并完全忽略
if..else