删除前后字符
remove characters before and after
这里,我使用strstr
删除后面的字符,substr
用于删除前面的字符。但是如何一次删除前后所有字符?
我只需要从这个变量 $mrk = 'Science-80_John'
中得到 80
,省略 Science
和 John
。
我在做什么
$mrk = 'Science-80_John';
$mark = substr($mrk,strpos($mrk,'-')+1);
//output: 80_John
echo strstr($mark, '_', true);
//output: 80
还有其他更短或最好的方法吗?
您可以在 preg_replace()
中使用正则表达式并删除添加非数字字符
$mrk = 'Science-80_John';
$newStr = preg_replace("/\D+/", "", $mrk);
// 80
因为 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"
由于新的 return 值由数字组成,我们不再严格需要转换,因为 PHP 的 type juggling。如果根本没有数字,这个解决方案 return 是空字符串, ""
如果在以后的计算中使用它会产生错误。强制转换为 (int)
会默默地 return 0
但不会告诉我们数据库是否需要更正。在这种情况下哪个会更好?另一个设计决定。
在 Extract numbers from a string 的一些解决方案中,字符串函数也避免了正则表达式的潜在缺陷。如果 $str 中多了一个“45”会怎样?结果,8045
可能并不理想。
>>> $mrk = 'Science-80_John45';
=> "Science-80_John45"
>>> $newStr = preg_replace("/\D+/", "", $mrk);
=> "8045"
这里,我使用strstr
删除后面的字符,substr
用于删除前面的字符。但是如何一次删除前后所有字符?
我只需要从这个变量 $mrk = 'Science-80_John'
中得到 80
,省略 Science
和 John
。
我在做什么
$mrk = 'Science-80_John';
$mark = substr($mrk,strpos($mrk,'-')+1);
//output: 80_John
echo strstr($mark, '_', true);
//output: 80
还有其他更短或最好的方法吗?
您可以在 preg_replace()
中使用正则表达式并删除添加非数字字符
$mrk = 'Science-80_John';
$newStr = preg_replace("/\D+/", "", $mrk);
// 80
因为 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"
由于新的 return 值由数字组成,我们不再严格需要转换,因为 PHP 的 type juggling。如果根本没有数字,这个解决方案 return 是空字符串, ""
如果在以后的计算中使用它会产生错误。强制转换为 (int)
会默默地 return 0
但不会告诉我们数据库是否需要更正。在这种情况下哪个会更好?另一个设计决定。
在 Extract numbers from a string 的一些解决方案中,字符串函数也避免了正则表达式的潜在缺陷。如果 $str 中多了一个“45”会怎样?结果,8045
可能并不理想。
>>> $mrk = 'Science-80_John45';
=> "Science-80_John45"
>>> $newStr = preg_replace("/\D+/", "", $mrk);
=> "8045"