我已经测试了\v(垂直空白)匹配\r\n及其组合,但是发现\v与\r和不匹配\n。以下是我正在使用的代码。
\v
\r\n
\r
\n
$string = " Test "; if (preg_match("#\v+#", $string )) { echo "Matched"; } else { echo "Not Matched"; }
更明确地说,我的问题是,还有其他匹配的替代方法\r\n吗?
PCRE具有许多与换行相关的转义序列和替代方法。
好吧,您可以在此处使用一个漂亮的转义序列\R。默认情况下\R将匹配Unicode换行符序列,但可以使用其他替代方法进行配置。
\R
匹配ASCII范围内的任何Unicode换行符序列。
ASCII
preg_match('~\R~', $string);
这等效于以下组:
(?>\r\n|\n|\r|\f|\x0b|\x85)
匹配任何Unicode换行符序列;包括ASCII范围之外的换行符以及行分隔符(U+2028)和段落分隔符(U+2029),您都想打开u( unicode )标志。
U+2028
U+2029
u
preg_match('~\R~u', $string);
的u( unicode的 上PCRE与模式串的附加功能)改性剂匝被视为( UTF-8 )。
等效于以下组:
(?>\r\n|\n|\r|\f|\x0b|\x85|\x{2028}|\x{2029})
它可以限制\R匹配CR,LF或CRLF只:
CR
LF
CRLF
preg_match('~(*BSR_ANYCRLF)\R~', $string);
(?>\r\n|\n|\r)
支持五种用于指示字符串中的换行符的约定:
(*CR) carriage return (*LF) linefeed (*CRLF) carriage return, followed by linefeed (*ANYCRLF) any of the three above (*ANY) all Unicode newline sequences
注意 :\R在字符类内部没有特殊含义。与其他无法识别的转义序列一样,默认情况下将其视为文字字符“ R”。