如何查找PHP字符串中第一个出现的字符(a-z或a-z)?
我需要得到字符串中第一个出现的字符,该字符可以是(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; } 它返回字符串中第一个整数出现的位置,但对于字符则无法执行此操作 修复正则表达式以满足当前的要求,以找到可以使用的第一个拉丁字母
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);
正则表达式匹配:
-字符串的开头^
-0个或多个字符,拉丁字母除外,最多[^a-z]*
-拉丁字母(虽然此字母未被使用,但不属于匹配的一部分)(?=[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]
?实际上,第一个角色被捕获。