【问题标题】:preg replace: replace all line breaks outside a title attributepreg replace:替换标题属性之外的所有换行符
【发布时间】:2014-03-14 19:28:18
【问题描述】:

一般来说,我只想使用一个函数来缩小我的输出(通过删除换行符和制表符),但问题是,使用这样的普通代码

return str_replace(array("\r\n", "\t"), '', $s);

标题属性(例如,当您移过一个单词并出现工具提示时)也会被缩小,并且换行符会丢失。我想保留在 title="textwithlinebreakhere" 内的换行符,但删除外面的所有换行符。

我不知道如何实现这一点,所以我希望你能帮助我。

谢谢!

【问题讨论】:

    标签: javascript php html replace


    【解决方案1】:

    您应该使用preg_replace_all(),然后使用(?<!your_match_here) 及其兄弟。兄弟姐妹是什么意思是negative_lookbehind和positive_lookbehind,它们会调节您的搜索算法以查看字符是在某个字母/符号/数字之后还是之前

    【讨论】:

    • 问题是,我也没有得到匹配非负匹配的解决方案,所以我如何只删除标题标签内的所有换行符。 preg_replace('/title="(.*)"/','', $s);完全删除所有内容.. 抱歉,我并没有真正使用过这个功能,我很难过。
    • 让我们逐字逐句。你应该告诉正则表达式:请删除所有 br 标签,但不要删除 title=" 和 " 之前的标签。现在你应该强迫你的大脑解决这个问题。这很容易。让我找到它,我会发布它
    • 是的,这听起来很简单。我现在尝试了几个小时,但没有完成。你能给我举个例子吗?
    • 关于您的示例,最好使用环视:preg_replace('/title="((?
    【解决方案2】:

    使用 trim_all() 删除不需要的字符 - PHP :

    这个函数的灵感来自 PHP 的内置函数 修剪 从字符串的开头和结尾删除不需要的字符,如果没有提供这样的字符作为第二个参数 修剪 , 删除此列表中提供的空白字符。

    那么,什么 修剪全部() 怎么办?

    trim_all() 旨在删除字符串两端的所有空白实例,以及删除字符串中重复的空白字符。但是,后来,我把它变成了一个通用的函数,它不仅可以修剪和清理空白,还可以接受要替换的字符和要替换的字符。使用此功能,您可以:

    1. 规范化空白,以便所有多个 \r , \n , \t , \r\n , \0 , 0x0b , 0x20 并且所有控制字符都可以用一个空格替换,也可以从字符串的两端修剪;

    2. 删除所有不需要的字符;

    3. 删除重复项;

    4. 用一个字符或字符串替换多次出现的字符。


    function trim_all( $str , $what = NULL , $with = ' ' )
    {
        if( $what === NULL )
        {
            //  Character      Decimal      Use
            //  "\0"            0           Null Character
            //  "\t"            9           Tab
            //  "\n"           10           New line
            //  "\x0B"         11           Vertical Tab
            //  "\r"           13           New Line in Mac
            //  " "            32           Space
    
            $what   = "\\x00-\\x20";    //all white-spaces and control chars
        }
    
        return trim( preg_replace( "/[".$what."]+/" , $with , $str ) , $what );
    }
    

    当您想从用户输入中删除不需要的字符时,此功能会很有帮助。这是它的使用方法。

    使用示例:

    $full_name = trim_all( $_POST['full_name'] );
    

    $full_name = trim_all( $full_name , "\t" , "" );
    

    【讨论】:

      猜你喜欢
      • 2016-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-05
      • 1970-01-01
      • 2021-03-26
      • 2018-01-11
      • 2021-08-14
      相关资源
      最近更新 更多