我正在将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
应该起作用并停止我的痛苦,任何想法:\?