删除最后一个字母前的所有字符

时间:2015-07-27 05:08:59

标签: php regex

我有一个混合字符串,例如:

Job number  45752 Subtotal price $937.50 
Job number  7852 Subtotal amount $637.50 
Job number  42 Subtotal test $427.50 
Job number  47592 Subtotal sample $976.50 

如何在价格上检测最后一个字母字符,如第一个样本'e',并获取其位置,然后删除前面的所有其他字符?

我知道strpos可用于查找最后一个字符

strpos(string,find,start)

但是如何让它跟踪任何字母而不是固定字母呢?我猜测正则表达式可能会有所帮助,但不知道如何把它放入。请帮助。

8 个答案:

答案 0 :(得分:6)

使用正则表达式preg_replace()功能,使用flags i无外壳和m多线模式:
要使用可选空格从^行开头替换为最后一个字母,请在[a-z]之前加greedy dot

$str = preg_replace('/^.*[a-z]\h*/im', "", $str);

\h*匹配任意数量的水平空间。请参阅test at regex101eval.inregex quickstart

答案 1 :(得分:3)

我认为这有助于:

/.* ([^a-z]+)$/igm

[Regex Demo]

/([^a-z]+)$/igm

[Regex Demo]

答案 2 :(得分:1)

试试这个..

strstr()这样做。

$email  = 'name@example.com';
$domain = strstr($email, '@');
echo $domain;

//打印@ example.com

价:http://php.net/manual/en/function.strstr.php

答案 3 :(得分:1)

您似乎正在尝试提取美元金额。你可以这样做。您可以使用strrchr

strrchr ( $string, '$' );

答案 4 :(得分:1)

$str = "Job number 45752 Subtotal price $937.50";
$regex = "/.*([a-z])[^a-z]+$/i";
preg_match($regex, $str, $matches,PREG_OFFSET_CAPTURE );

echo $matches[1][1];

<强>输出

Array
(
    [0] => Array
        (
            [0] => Job number 45752 Subtotal price $937.50
            [1] => 0
        )

    [1] => Array
        (
            [0] => e
            [1] => 30
        )

)

<强>演示

https://regex101.com/r/xP4hB1/3

答案 5 :(得分:1)

<?php
$str ="Job number  3333 Subtotal price $937.50 ";
$cost = substr($str, strpos($str, "$") + 1);    
echo '$'.$cost;

答案 6 :(得分:1)

我建议使用字符串函数而不是正则表达式,因为它们的速度要快得多。 我假设您想要价格,只需找到最后一个空格,然后从那里继续:

$

如果你有一个固定的curr:ency(例如:$lastChar = strros($string, '$')+1; // find the last matching char echo substr($string, $lastChar ); ),你可以对货币字符做同样的事情

$

删除show1会给你带符号的价格,+没有。无论你喜欢哪个。

答案 7 :(得分:0)

虽然已经给出了几个答案,但我想指出一些没有触及的东西,I18N。如果价格以不同的货币给出怎么办?

Job number  45752 Subtotal price CHF937.50 
Job number  7852 Subtotal amount NOK637.50 
Job number  42 Subtotal test SEK427.50 
Job number  47592 Subtotal sample DKK976.50

假设某种货币用特殊的非字母符号表示,对于绝大多数世界货币来说都是假的。通过搜索Martijn之类的最后一个空格字符,建议您不要将代码限制为仅限美元货币。

虽然上面给出的例子不是典型的好例子,但通常在使用currency codes时货币代码和金额之间会有空格。并且假设在许多区域设置的货币指示符为假之后金额出现,所以存在 更多的是适当的i18n处理,但至少从编写仅限于处理美元的代码开始。