如何在PHP字符串中找到第一个出现的字符(a-z或A-Z)?

时间:2015-10-26 08:14:00

标签: php regex string

我需要在字符串中首次出现一个字符,该字符可以是(a-z或A-Z)中的任何字符。

我可以使用以下函数从字符串中第一次出现整数:

function my_ofset($text){
    preg_match('/^\D*(?=\d)/', $text, $m);
    return isset($m[0]) ? strlen($m[0]) : false;
}

它返回字符串中第一次出现整数的位置,但是在字符的情况下不能这样做。

2 个答案:

答案 0 :(得分:2)

修复你的正则表达式以满足当前的要求,找到你可以使用的第一个拉丁语letterm的位置

preg_match('/^[^a-z]*(?=[a-z])/i', $text, $m);

正则表达式匹配:

  • ^ - 字符串开头
  • [^a-z]* - 除拉丁字母以外的0个或更多字符......
  • (?=[a-z]) - 一封拉丁字母(虽然这封信没有被消费,但不属于比赛的一部分)。

请参阅IDEONE demo

请注意/i修饰符允许不区分大小写的搜索(因此,不需要使用[a-zA-Z])。

作为替代方案,您可以使用PREG_OFFSET_CAPTURE

  

<强> PREG_OFFSET_CAPTURE
  如果传递此标志,则对于每个发生的匹配,还将返回附加字符串偏移量。请注意,这会将匹配的值更改为一个数组,其中每个元素都是一个数组,该数组由偏移0处的匹配字符串组成,其字符串偏移到偏移1的主题。

这是一个演示:

preg_match('/[a-z]/i', $text, $m, PREG_OFFSET_CAPTURE);
echo $m[0][1];

请参阅another IDEONE demo

此处,$m[0]是整个匹配的文本,$m[0][1]是输入中匹配的子字符串的偏移量(= index)。

答案 1 :(得分:1)

试试这个

function my_ofset($text){
    preg_match('/^[^a-z]*(?=[a-z])/i', $text, $m);
    return isset($m[0]) ? strlen($m[0]) : false;
}