将HTML文件转义为字符串,用作正则表达式字符串

时间:2019-09-02 17:48:47

标签: php regex

我正在将HTML文件加载到变量中,并在preg_match中将其用作匹配的字符串。

现在我需要转义所有存在的特殊字符以使其与正则表达式一起工作。

TAB => \t
NEWLINE => \n
CARRIEG RETURN => \r
CARRIEG RETURN+NEWLINE => \n
VERTICAL TAB => \cK
and other special characters...

例如,此HTML文件

text \text text <tag attr="val"> text </tag> 
text text $ ^ text
{} text text text 
text | text

将转换为此

text \\text text \<tag attr\=\"val\"\> text \<\/tag\> \ntext text \$ \^ text\n\{\} text text text \ntext \| text

有内置功能可以使我的生活更轻松?

更新:

我使用此函数使看起来正确的正则表达式函数可以访问字符串:

private function real_regular_expression_string($text) {
    // Escape backslashes
    $text = preg_replace('/[\\\\]/', '\\\\', $text);
    // Escape regular expression special character
    $text = preg_quote($text, '/');
    // Search and Replace variable for another special characters
    $search = [
        "\n",   // 2 - New line character
        "\r",   // 3 - Carriage-Return character
        "\t",   // 4 - Horizontal tab character
        "\v",   // 5 - Vertical tab character
        "\e",   // 6 - Escape character
        "\f",   // 7 - Form-feed character
    ];
    $replace = [
        '\n',   // 2 
        '\r',   // 3
        '\t',   // 4
        '\cK',  // 5
        '\a',   // 6
        '\f',   // 7
    ];
    $text = str_replace($search, $replace, $text);
    // A littel fix
    $text = str_replace('\r\n', '\n', $text);
    return $text;
}

有什么想法可以使它变得更好吗?

但是,现在preg_match无法正常工作:\

我从上面的函数中得到了这个正则表达式字符串:

/(?:(?:.*)(?:\r\n|\r|\n))*(?<offset>.*)(?:\$\{ALMdOG \= \n\t\$\{ALMdOG\} \n\})/

,HTML文件为:

text text text text 
numerofcharacters ${ALMdOG = 
    ${ALMdOG} 
} 
text text text text 
text text text text 
text text text text 

应该起作用并停止我的痛苦,任何想法:\?

1 个答案:

答案 0 :(得分:0)

您可能正在寻找preg_quote

从文档中

  

preg_quote()str并在正则表达式语法中每个字符前面加一个反斜杠。