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

如何查找PHP字符串中第一个出现的字符(a-z或a-z)?,php,regex,string,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; } 它返回字符串中第一个整数出现的位置,但对于字符则无法执行此操作 修复正则表达式以满足当前的要求,以找到可以使用的第一个拉丁字母

我需要得到字符串中第一个出现的字符,该字符可以是(a-z或a-z)中的任意字符

我可以使用以下函数从字符串中获取第一个出现的整数:

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

它返回字符串中第一个整数出现的位置,但对于字符则无法执行此操作

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

preg_match('/^[^a-z]*(?=[a-z])/i', $text, $m);
正则表达式匹配:

  • ^
    -字符串的开头
  • [^a-z]*
    -0个或多个字符,拉丁字母除外,最多
  • (?=[a-z])
    -拉丁字母(虽然此字母未被使用,但不属于匹配的一部分)

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

或者,您可以使用
PREG\u OFFSET\u CAPTURE

PREG\u OFFSET\u CAPTURE

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

下面是一个演示:

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

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

试试这个

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

您是否查看了
str_pos()
@stribizev,是否编辑了我的问题,请查看如果您编写了a-z或a-z,请尝试
preg_match('/^[^a-z]*(?=[a-z])/i',$text,$m)@stribizev,哇!太好了,非常感谢您这么快的回复:)我在回答中添加了一些解释。我这里不涉及Unicode方面,因为您的要求看起来只是ASCII拉丁字母。如果您需要的都是字母,那么解决方案会有点不同:
'/^\P{L}*(\P{L})/u'
。如果你需要计算长度,你需要
mb_strlen
@stribizev:为什么不干脆
\p{L}
[a-z]
?实际上,第一个角色被捕获。