是否可以构造与 3 个或更多非连续 UTF 代码点匹配的 PCRE UTF-8 正则表达式
Is it possible to construct a PCRE UTF-8 regex which matches 3 or more non-consecutive UTF codepoints
早上好,我们正在尝试使用 C/C++ PCRE 正则表达式"x{00F6}.*x{00E4}.*x{00E7}"
匹配德语字符串 'DAS tausendsch'ne Jungfr¤ulein tausendschçne'。PCRE 正则表达式仅匹配一次,从字节位置 14 和 43 开始。我们的 PCRE 正则表达式是否正确或应该更正?谢谢。
您误解了返回的数据。
PCRE 返回匹配的起始和结束位置。它在每种情况下只匹配一次,但匹配包括匹配的整个字符串,包括由"无聊"的东西匹配的部分,如.*
。
因此,对于您的输入字符串,它匹配了以下部分:
DAS tausendschöne Jungfräulein tausendschçne
..............mmmmmmmmmmmmmmmmmmmmmmmmmmmm..
或者等效地,它匹配了以下字节:
0 1 2 3 4 4
01234567890123456789012345678901234567890123456789
DAS tausendschöne Jungfräulein tausendschçne
..............mmmmmmmmmmmmmmmmmmmmmmmmmmmmmm...
它的行为正确。 从 http://www.pcre.org/pcre.txt :
匹配成功后,有关捕获的子字符串的信息为 以整数对返回,从 ovector 的开头开始, 并且最多持续到其长度的三分之二。 第一个 元素设置为第一个字符的字节偏移量 在子字符串中,第二个设置为第一个的字节偏移量 子字符串末尾后面的字符。注意:这些值始终是 字节偏移量,即使在 UTF-8 模式下也是如此。它们不是字符计数。
第一对整数 ovector[0] 和 ovector[1] 标识 主题字符串的一部分与整个模式匹配。下一个 对用于第一个捕获子模式,依此类推。
下午好,我们刚刚发现了正确的 PCRE 正则表达式。(?=.+(\x{00F6})){1}(?=.+(\x{00E4})){1}(?=.+(\x{00E7})){1}
它匹配 DAS tausendschöne Jungfräulein ausendschçne at byte 位置 (14,16),(25,27)和(42,43)。问候,弗兰克
- HEX值到wchar_t字符(UTF-8)的转换
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 代码在main()中运行,但在函数中出现错误
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 编译包含字符串的代码时遇到问题
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 从/到 UTF-8/UTF-16 的转换需要(例如:utf8 -> 代码点,然后代码点到 utf16)或(例如:utf8 -> utf16)?
- 如何将代码点转换为 utf-8
- 如何从 UTF-8 字符串的每个字符中获取 UNICODE 代码
- 如何在c++中将unicode代码点转换为utf-8
- 如何使Windows 7支持12000(UTF-32)代码页或1200(UTF-16)代码页
- 是否可以构造与 3 个或更多非连续 UTF 代码点匹配的 PCRE UTF-8 正则表达式
- C/C++ PCRE 是否可以匹配 2 个或多个 UTF-8 代码点,这些代码点在 UTF-8 字符串中彼此相距甚远
- 在编译/运行时将字符串文本的原始字节流入/流出Windows(非宽)执行字符集,以及ANSI代码页与UTF-8
- 如何以与字节序无关的方式读取 UTF-16 代码点的长度
- 如何遍历字符串中的所有utf-8代码点
- 如何在没有UTF-8特定代码的情况下解析多语言文档
- 是什么保证了存储在char32_t或char16_t-to-char中的UTF-8代码单元的static_cast将按预
- 为什么使用中文代码页集的Windows控制台可以显示UTF-16编码的字符