我需要在字符串中首次出现一个字符,该字符可以是(a-z或A-Z)中的任何字符。
我可以使用以下函数从字符串中第一次出现整数:
function my_ofset($text){
preg_match('/^\D*(?=\d)/', $text, $m);
return isset($m[0]) ? strlen($m[0]) : false;
}
它返回字符串中第一次出现整数的位置,但是在字符的情况下不能这样做。
答案 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];
此处,$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;
}