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

dco*_*296 5 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;
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*der 14

把它放入你的if-check:

preg_match("/[0-9.!?,;:]$/", $string)
Run Code Online (Sandbox Code Playgroud)

这将匹配一个数字,或者在字符串结束之前的任何给定标点符号($).将您想要视为匹配的任何其他标点字符添加到字符类(方括号)中.

  • 为什么不简单地`/ [^ az] $/i`? (3认同)
  • @ dcoffey3296请注意他们做了不同的事情.我断言最后一个字符不在黑名单`az`中,m.buettner断言它在白名单中是`0-9.!?,;:`.确保您确切知道要确定的内容. (3认同)
  • 因为他指定了数字或标点符号.没有空格或任何东西.所以我认为他宁愿明确说出要匹配的字符. (2认同)
  • 好的,我会给你的,这确实符合要求。我怀疑“非 alpha 字符”是 OP 真正想要的,但这将由他说。+1 (2认同)

Tot*_*oto 5

标点符号的unicode属性是\p{P}或者\p{Punctuation}是数字的\pN.

在PHP中你可以使用:

preg_match('/[\p{P}\p{N}]$/u', $string);
Run Code Online (Sandbox Code Playgroud)

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

看看这个网站.