从字符串中删除数字前缀 - PHP 正则表达式

Remove numeric prefix from string - PHP regex

提问人:Pekka 提问时间:3/8/2010 更新时间:3/8/2010 访问量:7040

问:

有人愿意帮助我使用正则表达式来可靠地识别和删除字符串开头的任何数字,后跟一个点吗?因此

1. Introduction

成为

Introduction

1290394958595. Appendix A

成为

Appendix A
PHP 正则表达式

评论


答:

0赞 Tyler Carter 3/8/2010 #1

字符串后的东西

$string = "1290394958595. Appendix A";
$first_space_position = strpos(" ", $string);
$stuff_after_space = substr($string, $first_space_position);

点后的东西

$string = "1290394958595. Appendix A";
$first_dot_position = strpos(".", $string);
$stuff_after_dot = substr($string, $first_dot_position);

评论

0赞 Anthony Forloney 3/8/2010
忘记了右括号,所以我帮你闭上了。
0赞 Pekka 3/8/2010
干杯,但这些都会吃掉一切(例如),而不仅仅是数值。A. Appendix A
0赞 Marcos Placona 3/8/2010 #2

给你:

/[0-9]+\./

顺便说一句,我肯定会在这里使用正则表达式,因为它们非常可靠和轻量级。

干杯

评论

0赞 Romain 3/8/2010
实际上,任何像这样的句子都会被破坏!1。
0赞 Marcos Placona 3/8/2010
损坏?你是什么意思?它不会
0赞 Gumbo 3/8/2010
PCRE中没有g修饰剂。
0赞 Marcos Placona 3/8/2010
很公平,但它肯定比标记的解决方案更好。删除了 /g
0赞 Felix 3/8/2010
不,不是。如前所述,“123.第 3 章。有意大利面的“会变成”有意大利面的那一章“,这不是预期的效果。
11赞 2 revsEnrico Carlesso #3

尝试:

preg_replace('/^[0-9]+\. +/', '', $string);

这给出了:

php > print_r(preg_replace('/^[0-9]+\. +/', '', '1231241. dfg'));
dfg

评论

2赞 Gumbo 3/8/2010
请注意,它表示一个任意字符,而不是句点字符。.
2赞 Samir Talwar 3/8/2010
在@Romain的回答中,有两件事不是问题:将匹配零位数字,这很糟糕 - 使用 a 代替 ,并且 the 是一个特殊字符,意思是“匹配任何字符”,应该通过在它前面加上反斜杠 ('') 来转义。[0-9]*+*.
0赞 Marcos Placona 3/8/2010
这与此有何不同?/[0-9]+\./g 除了贪婪和冗长?
1赞 Felix 3/8/2010
@mplacona 它以 ^ 开头。非常重要。
3赞 Romain 3/8/2010 #4

瞧:

^[0-9]+\.
0赞 Felix Kling 3/8/2010 #5
print preg_replace('%^(\d+\. )%', '', '1290394958595. Appendix A');
0赞 Tim 3/8/2010 #6

PHP 函数在字符串中搜索正则表达式并将其替换为其他内容是preg_replace。在这种情况下,您需要类似的东西:

$mytitle = preg_replace('/^[0-9]+\. */', '', $myline);

评论

0赞 Felix Kling 3/8/2010
它应该是.preg_replace('/^[0-9]+\. */', '', $myline)
1赞 Gordon 3/8/2010 #7

好的,这不符合识别和删除任何数字的条件,后跟一个点,但它将返回所需的字符串,例如附录 A,因此它可能有资格作为替代方案。

// remove everything before first space
echo trim(strstr('1290394958595. Appendix A', ' '));

// remove all numbers and dot and space from the left side of string
echo ltrim('1290394958595. Appendix A', '0123456789. ');

只是忽略它,它不是一种选择。

9赞 Felix 3/8/2010 #8

我知道这个问题已经结束了,只有我的两分钱:

preg_replace("/^[0-9\\.\\s]+/", "", "1234. Appendix A");

在我看来,效果最好,主要是因为它还可以处理以下情况

1.2 This is a level-two heading

评论

0赞 Pekka 3/8/2010
@Felix欢呼,这非常好,我自己也没有。+1.
0赞 Felix 3/8/2010
如果您认为此答案比当前接受的答案更好,则可以切换它。我不是想窃取任何人的雷霆,我只是在想任何有同样问题的人最终出现在这个页面上,却没有看到适当的答案。
0赞 ghostdog74 3/8/2010 #9
$str="1290394958595. Appendix A";
$s = explode(" ",$str,2);
if( $s[0] + 0 == $s[0]){
  print $s[1];
}