删除之前和之后的字符

时间:2018-11-22 18:48:14

标签: php regex substr strstr

在这里,我使用strstr删除字符后,而substr则删除字符前。但是,如何一次删除之前和之后的所有字符?

我只需要从此变量80中获得$mrk = 'Science-80_John',而忽略ScienceJohn

我在做什么

$mrk = 'Science-80_John';

$mark = substr($mrk,strpos($mrk,'-')+1);
//output: 80_John

echo strstr($mark, '_', true);
//output: 80

还有其他最佳方法吗?

2 个答案:

答案 0 :(得分:2)

因为op要求采用 short best 方式。使用演员表,Number_from_string 可能会更好。忽略minus signs(在此示例中为连字符),我们得到一个正整数。

>>> $mrk = 'Science-80_John';
=> "Science-80_John"
>>> $num = (int)strpbrk ($mrk, "0123456789");
=> 80

以上用例假设除了仅提取一个正整数外,scientific notation还可以。约翰决定当个聪明的小伙子,并把他的签名改成很多。我们必须决定在什么情况下系统应接受或拒绝scientific notation

>>> $mrk = 'Science-80E+21_John45';
>>> $num = (int)strpbrk ($mrk, "0123456789");
=> 9223372036854775807 // ack!

>>> $pat = "0123456789";
>>> $num = strpbrk ($mrk, $pat);
>>> $num = substr($num,0 ,strspn($num, $pat));
=>  "80"

由于新的返回值由数字组成,因此由于PHP的type juggling,我们不再严格需要强制转换。如果根本没有数字,则此解决方案将返回空字符串"",如果稍后在计算中使用该字符串,则会产生错误。强制转换为(int)会静默返回0,但不会告诉我们数据库是否需要更正。在这种情况下哪个会更好?另一个设计决定。

Extract numbers from a string的某些解决方案中,字符串函数还避免了使用正则表达式的潜在陷阱。如果$ str中有多余的“ 45”会怎样?结果8045可能是不可取的。

>>> $mrk = 'Science-80_John45';
=> "Science-80_John45"
>>> $newStr = preg_replace("/\D+/", "", $mrk);
=> "8045"

答案 1 :(得分:1)

您可以在preg_replace()中使用正则表达式,并删除添加非数字字符

$mrk = 'Science-80_John';
$newStr = preg_replace("/\D+/", "", $mrk);
// 80