当前位置: 首页 > 面试题库 >

PHP正则表达式:如何在不使用[\ r \ n]的情况下匹配\ r和\ n?

宋望
2023-03-14
问题内容

我已经测试\v(垂直空白)匹配\r\n及其组合,但是发现\v\r和不匹配\n。以下是我正在使用的代码。

$string = "
Test
";

if (preg_match("#\v+#", $string )) {
  echo "Matched";
} else {
  echo "Not Matched";
}

更明确地说,我的问题是,还有其他匹配的替代方法\r\n吗?


问题答案:

PCRE和换行符

PCRE具有许多与换行相关的转义序列和替代方法。

好吧,您可以在此处使用一个漂亮的转义序列\R。默认情况下\R将匹配Unicode换行符序列,但可以使用其他替代方法进行配置

匹配ASCII范围内的任何Unicode换行符序列。

preg_match('~\R~', $string);

这等效于以下组:

(?>\r\n|\n|\r|\f|\x0b|\x85)

匹配任何Unicode换行符序列;包括ASCII范围之外的换行符以及行分隔符(U+2028)和段落分隔符(U+2029),您都想打开u
unicode )标志。

preg_match('~\R~u', $string);

uunicode的 上PCRE与模式串的附加功能)改性剂匝被视为( UTF-8 )。

等效于以下组:

(?>\r\n|\n|\r|\f|\x0b|\x85|\x{2028}|\x{2029})

它可以限制\R匹配CRLFCRLF只:

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”。



 类似资料:
  • 问题内容: 这可能是一个非常简单的修复程序,但我无法弄清楚! 给定以下文本,我正在尝试连续匹配(最多)3个大写单词。 。比赛应包括所有3个单词。 此正则表达式将匹配前两个单词,但不匹配第三个单词(此处为demo): 这个正则表达式 将 匹配所有3个单词,但是我必须在之间复制/粘贴空格,然后它才能正常工作(此处演示): 所以我假设也许空白不被当作空白,而是换行符或类似字符,所以我尝试了这个(这里是演

  • 我有一个包含和以及的字符串。 我们如何删除和,同时保持机智?

  • 有没有人试图描述与正则表达式匹配的正则表达式? 由于重复的关键字,这个主题几乎不可能在网上找到。 它可能在实际应用程序中不可用,因为支持正则表达式的语言通常具有解析它们的方法,我们可以将其用于验证,以及一种在代码中分隔正则表达式的方法,可用于搜索目的。 但是我仍然想知道匹配所有正则表达式的正则表达式是什么样子的。应该可以写一个。

  • 问题内容: 众所周知的事实是,现代正则表达式实现(最著名的是PCRE)与正则语法的经典示例{a n b n ; n> 0}(例如),使用此正则表达式(demo): 我的问题是:你能走多远?是否还可以使用PCRE 来解析上下文相关文法 {a n b n c n ; n> 0}(例如)? 问题答案: 受NullUserExceptions答案的启发(他已经删除了,因为它在一种情况下失败了),我认为自己

  • 问题内容: 原始数据是: 我想匹配一条线,但是不能使用 但是,我可以使用match 。 我该如何搭配 问题答案: 默认情况下,和分别匹配输入的开始和结束。您需要使用启用多行模式,这会导致并匹配行的开始和结束: 演示: 产生以下输出: 编辑我 没有任何匹配的事实是因为默认情况下,和不匹配。如果您通过启用了DOT-ALL ,也使匹配了它们,那么您将看到整个输入字符串都被匹配了: 编辑二 在这种情况下,

  • 我们得到了一些这样的内容: