使用php来检测字符串中最后一个字母字符串的字符串位置?

时间:2017-09-20 20:05:21

标签: php regex

假设我有字符串..

UA30230983A012
FK903980232P00

如何获得A和P的str?我试图插入一个 - 在最后一个字母字符之前它并没有那么好。

我尝试了以下内容......

$var = strrpos($var, '/^[A-Z]+$/i', 0);

...但它总是返回false?

6 个答案:

答案 0 :(得分:1)

<?php

$strings =
[
    'UA30230983A012',
    'FK903980232P00'
];

$hyphened = array_map(function($v) {
    return preg_replace('/([A-Z]{1}[0-9]+)$/', '-$1', $v);
}, $strings);

var_export($hyphened);

输出:

array (
0 => 'UA30230983-A012',
1 => 'FK903980232-P00',
)

答案 1 :(得分:1)

如果你想要一个匹配的位置你可以使用函数preg_match得到它,标志PREG_OFFSET_CAPTURE返回匹配参数中的位置:

$subjects = ['UA30230983A012', 'FK903980232P00'];

foreach ($subjects as $subject) {
    if ( preg_match('~.*\K[A-Z]~', $subject, $match, PREG_OFFSET_CAPTURE) )
        echo $match[0][1], PHP_EOL;
}

该模式使用.*的贪婪来获取字符串的最后一个字母。 \K是一种在模式中开始匹配结果的简便方法。

在最后一个字母前插入连字符:

$result = preg_filter('~.*\K(?=[A-Z])~', '-', $subjects);

答案 2 :(得分:0)

您可以使用preg_replace()来匹配未跟随任何其他字母字符的字母字符。

$var = preg_replace('/[a-z][^a-z]*$/i', 'a$0', $var);

DEMO

答案 3 :(得分:0)

您可以使用正则表达式在字符串中查找最新的非数字字符,但是当您或团队中的其他开发人员重新使用此代码并尝试记住它时,这可能不太容易阅读确实。用简单易读的基本PHP代码做什么呢?

<?php
$string = 'FK903980232P00';
$split  = str_split($string);

$last_alpha_index = null;
foreach($split as $key => $char) {
    if (is_numeric($char))
        continue;
    $last_alpha_index = $key;
}

array_splice($split, $last_alpha_index, 0, '-');
echo implode('', $split);

输出:

FK903980232-P00

向后翻阅字符串,直到我们达到非数字:

$add_hyphen = function($str) {
    foreach(str_split(strrev($str)) as $k => $v)
        if(!is_numeric($v))
            return substr_replace($str, '-', -($k+1), 0);
};
echo $add_hyphen('UA30230983A012');

输出:

UA30230983-A012

答案 4 :(得分:0)

$strA ="UA30230983A012";
echo substr_replace($strA,'aA', strrpos($strA, 'A'), 1);

答案 5 :(得分:0)

正如KIKO软件在OP的评论中所说:

<?php
$strings =
[
    'UA30230983A012',
    'FK903980232P00'
];

$hyphened = array_map(function($v) {
    $pos = strlen(rtrim($v,'1234567890'));
    return substr_replace($v, '-', $pos-1, 0);
}, $strings);

var_export($hyphened);

输出:

array (
0 => 'UA30230983-A012',
1 => 'FK903980232-P00',
)