在php中如何检查字符串是否以标点符号结尾?
我正在逐行解析一些文本,如果给定的行以任何标点或数字结尾,我希望布尔值返回true 正则表达式是最好的方法,还是应该使用字符数组进行迭代以匹配?感觉阵列太大太昂贵了 如果这真的是一个好方法,有人能帮我用正则表达式吗在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
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
。