【问题标题】:Replace numbers, dash, dot or space from the start of a string with PHP regex用 PHP 正则表达式替换字符串开头的数字、破折号、点或空格
【发布时间】:2015-07-26 14:50:35
【问题描述】:

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

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';
}

【问题讨论】:

    标签: php regex


    【解决方案1】:

    您的正则表达式 - /^[\d{0,4}(. -)?]/ - 匹配字符串的开头,然后是 1 个字符:要么是数字,要么是 {,要么是 0,要么是 , ,或},或(,或点,或从空格到)的范围(即空格,!"#$%&'),或问号。所以,它只能在您描述的有限数量的情况下工作。

    随便用

    preg_replace('/^[\d .-]+/','', $t);
    

    这里,

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

    demo

    请注意,如果您有多行,则需要 (?m) 修饰符。

    preg_replace('/(?m)^[\d .-]+/','', $t);
    

    这是IDEONE demo

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

    【讨论】:

    • @slartidan 您提供的代码删除了所有数字,在某些情况下,数字是字符串的一部分,例如12. 3Lau 并得到3Lau
    • @TurnTheTables 我认为你的评论是针对@stribizhev
    • @TurnTheTables:如果空格和连字符必须在数字后面,你可以试试preg_replace('/^\s*\d*[ .-]+/','', $t);
    【解决方案2】:

    可以试试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
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-28
    • 2013-03-09
    • 1970-01-01
    相关资源
    最近更新 更多