使用PHP正则表达式替换字符串开头的数字,短划线,点或空格

时间:2015-07-26 14:50:36

标签: php regex

我试图用字符串开头的可选,破折号,点或空格替换数字,我的模式似乎不起作用。 我想替换它:

01. PHP
02  HTML5
03. - CSS3

PHP
HTML5
CSS3

我的代码如下:

$t = trim($_POST['test']);
$pattern = '/^[\d{0,4}(. -)?]/';
if(preg_match($pattern, $t)){
    echo preg_replace($pattern,'', $t);
}else{
    echo 'No';
}

3 个答案:

答案 0 :(得分:4)

您的正则表达式 - { - 匹配字符串的开头,然后 1个字符:数字,0, ,或},或(,或),或点,或从空格到!"#$%&'的范围(即空格)还有一个preg_replace('/^[\d .-]+/','', $t); 或一个问号。所以,它只适用于您描述的有限数量的案例。

只需使用

^

在这里,

  • [\d .-]+ - 匹配字符串/行的开头
  • (?m)匹配数字,空格,点或连字符,1次或多次

请参阅demo

Nogte如果你有多行,你需要preg_replace('/(?m)^[\d .-]+/','', $t); 修饰符。

u

这是IDEONE demo

注意:如果您打算从字符串开头删除任何不是字母的内容,我建议您使用^\P{L}+ regex f = either id (-1) 修饰符。

答案 1 :(得分:0)

可以尝试this

$t = "01. PHP";

$pattern = '/^[0-9\.\s\-]+/';

echo preg_replace($pattern, '', $t);

<强>输出

PHP

正则表达式解释

^ assert position at start of the string
0-9 a single character in the range between 0 and 9
\. matches the character . literally
\s match any white space character [\r\n\t\f ]
\- matches the character - literally

答案 2 :(得分:0)

只需删除最后一个空格中的所有字符。

preg_replace('~.*\h~m', '', $str);

\h匹配任何类型的水平空格字符。

DEMO