我有一个混合字符串,例如:
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)
但是如何让它跟踪任何字母而不是固定字母呢?我猜测正则表达式可能会有所帮助,但不知道如何把它放入。请帮助。
答案 0 :(得分:6)
使用正则表达式preg_replace()功能,使用flags i
无外壳和m
多线模式:
要使用可选空格从^
行开头替换为最后一个字母,请在[a-z]
之前加greedy dot
$str = preg_replace('/^.*[a-z]\h*/im', "", $str);
\h*
匹配任意数量的水平空间。请参阅test at regex101,eval.in,regex quickstart
答案 1 :(得分:3)
答案 2 :(得分:1)
试试这个..
strstr()
这样做。
$email = 'name@example.com';
$domain = strstr($email, '@');
echo $domain;
//打印@ example.com
答案 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
)
)
<强>演示强>
答案 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处理,但至少从编写仅限于处理美元的代码开始。