【问题标题】:remove characters before and after删除前后的字符
【发布时间】:2018-11-22 18:48:14
【问题描述】:

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

我只需要从这个变量$mrk = 'Science-80_John' 中获取80,省略ScienceJohn

我在做什么

$mrk = 'Science-80_John';

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

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

还有其他短的或最好的方法吗?

【问题讨论】:

标签: php regex substr strstr


【解决方案1】:

因为 op 要求 shortbest 方式。 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"

【讨论】:

  • 太棒了!比正则表达式更好!
  • 请注意,如果有人稍后查看此答案并需要负数,他们必须将- 字符添加到strpbrk 模式。在这里,这是行不通的,因为没有简单的方法可以区分 minus signs 和连字符。我们将把它留到下一次。
【解决方案2】:

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

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-27
  • 2017-03-26
  • 2019-01-13
  • 1970-01-01
  • 2011-04-28
  • 2022-12-03
  • 2017-09-06
相关资源
最近更新 更多