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

时间:2012-10-12 12:19:05

标签: php regex

我逐行解析一些文本,如果给定的行以任何标点符号或数字结尾,我希望布尔值返回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;
}

5 个答案:

答案 0 :(得分:14)

把它放入你的if-check:

preg_match("/[0-9.!?,;:]$/", $string)

这将匹配数字或字符串末尾($)之前的任何给定标点字符。将您想要视为匹配的任何其他标点字符添加到字符类(方括号)中。

答案 1 :(得分:5)

标点符号的unicode属性为\p{P}\p{Punctuation},其数字为\pN

在php中你可以使用:

preg_match('/[\p{P}\p{N}]$/u', $string);

如果字符串以标点符号或数字结尾,则返回true。

查看this site

答案 2 :(得分:1)

echo substr("abcdef", -1); // returns "f"

http://php.net/manual/en/function.substr.php

答案 3 :(得分:0)

您可以使用 substr function 或utf-8 mb_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)) {}

答案 4 :(得分:0)

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

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

if(strpbrk($last, $chars) !== false) {}

显然,使用mb_substring()代替Unicode。

还可以使用is_numeric()而不是在字符串中放置数字。但我发现这更简单,更易读,以后更容易修改。