regex - Unicode 正则表达式匹配换行符?

标签 regex unicode character-properties line-breaks

我有这个表格,我想从那里向数据库提交数据。数据是UTF8。我在匹配换行符时遇到问题。我使用的模式是这样的:

~^[\p{L}\p{M}\p{N} ]+$~u

这种模式工作正常,直到用户在他的文本框中放置一个新行。我试过使用 \p{Z}在类里面,但没有成功。我也试过“s”,但没有用。

任何帮助深表感谢。谢谢!

最佳答案

Unicode 换行符要么是一个紧跟一个换行符的回车符,要么是任何具有垂直空白属性的字符。

但看起来您正在尝试匹配那里的通用空白。在 Java 中,这将是

 [\u000A\u000B\u000C\u000D\u0020\u0085\u00A0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u2028\u2029\u202F\u205F\u3000]

可以通过使用范围“仅”这个来缩短:
 [\u000A-\u000D\u0020\u0085\u00A0\u1680\u180E\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]

包括水平空白( \h )和垂直空白( \v ),这可能与一般空白( \s )相同或不同。

看起来您也在尝试匹配字母数字。
  • 单独的字母通常是 [\pL\pM\p{Nl}] .
  • 数字并不总是全部\pN和他们一样经常 \p{Nd}否则有时 [\p{Nd}\p{Nl}] .
  • 标识符字符需要连接符标点符号和更多,所以 [\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics}&&\p{So}]] — 如果您的正则表达式引擎支持这些类型的操作(Java 支持)。就是这样 \w适用于支持 Unicode 的正则表达式语言(Java 不是其中之一)。

  • 在旧版本的 Perl 中,你可能会写一个换行符为
     (?:\r\n|\p{VertSpace})
    

    虽然现在最好写成
     (?:(?>\r\n)|\v)
    

    这正是
     \R
    

    火柴。

    Java 在这些事情上非常笨拙。在那里你必须写一个换行符
      (?:(?>\u000D\u000A)|[\u000A-\u000D\u0085\u2028\u2029])
    

    当写成字符串时,这当然需要额外的 bbaackkssllasshheess 。

    14 个常见字符类正则表达式转义的其他 Java 等效项,以便它们使用我提供的 Unicode in this answer .您可能必须在其他类似 Java 的 regex 语言中使用那些对 Unicode 不够了解的语言。

    关于regex - Unicode 正则表达式匹配换行符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4388630/

    相关文章:

    regex - Magento htaccess 重写和重定向

    java 将十六进制 NCR 文本转换为 unicode 字符

    xml - 以安全的 Rust 方式切片 XML 字符串

    c# - 为什么 IgnorePatternWhitespace 会破坏正则表达式?

    javascript - 正则表达式 - 用 XRegExp 替换

    Java Unicode 字符转 UTF

    unicode - 如何标记文档中的所有 CJK 文本?

    c# - 使用正则表达式匹配 C# Unicode 标识符

    java - Java 中的正则表达式将字母数字作为输入,后跟正斜杠,然后再输入字母数字

    python - 检查文本文件中是否存在字符串