提升Xpressive-无法在(Qualt)之后使用
Boost Xpressive - cannot use after(stuff)
我正在转换正则库(成千上万的perl Regex),并且遇到了一个主要问题。
这是我必须翻译成静态Xpresctions 的表达式:
(?<![A-ZÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖØÙÚÛÜÝ]. )[mM].(?! [A-ZÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖØÙÚÛÜÝ]. )
此表达式具有before
和after
负验证条件。
这通常我应该使用~after
和~before
。
但是,由于有多重字符,我必须将它们放入字符串文字中。
因此,我的最初尝试就是这样:
~after(range('A', 'Z')| as_xpr("À")| as_xpr("Á")| as_xpr("Â")| as_xpr("Ã")| as_xpr("Ä")|
as_xpr("Å")| as_xpr("Ç")| as_xpr("È")| as_xpr("É")| as_xpr("Ê")| as_xpr("Ë")|
as_xpr("Ì")| as_xpr("Í")| as_xpr("Î")| as_xpr("Ï")| as_xpr("Ñ")| as_xpr("Ò")|
as_xpr("Ó")| as_xpr("Ô")| as_xpr("Õ")| as_xpr("Ö")| as_xpr("Ø")| as_xpr("Ù")|
as_xpr("Ú")| as_xpr("Û")| as_xpr("Ü")| as_xpr("Ý") | as_xpr(". ") ) >>
(set= 'm', 'M') >> '.' >>
~before(range('A', 'Z')| as_xpr("À")| as_xpr("Á")| as_xpr("Â")| as_xpr("Ã")| as_xpr("Ä")|
as_xpr("Å")| as_xpr("Ç")| as_xpr("È")| as_xpr("É")| as_xpr("Ê")| as_xpr("Ë")|
as_xpr("Ì")| as_xpr("Í")| as_xpr("Î")| as_xpr("Ï")| as_xpr("Ñ")| as_xpr("Ò")|
as_xpr("Ó")| as_xpr("Ô")| as_xpr("Õ")| as_xpr("Ö")| as_xpr("Ø")| as_xpr("Ù")|
as_xpr("Ú")| as_xpr("Û")| as_xpr("Ü")| as_xpr("Ý") | as_xpr(". ") )
但是,由于这给出了可变数量的字符,因此不会编译。
无论如何,我可以在 static Xprescerse ?
,解决方案涉及多个before
和after
元素。
这是已经过测试并有效的解决方案:
(~after(range('A', 'Z') >> as_xpr(". ") >> as_xpr(". ")) >>
~after(as_xpr("À") >> as_xpr(". ")) >> ~after(as_xpr("Á") >> as_xpr(". ")) >> ~after(as_xpr("Â") >> as_xpr(". ")) >>
~after(as_xpr("Ã") >> as_xpr(". ")) >> ~after(as_xpr("Ä") >> as_xpr(". ")) >> ~after(as_xpr("Å") >> as_xpr(". ")) >>
~after(as_xpr("Ç") >> as_xpr(". ")) >> ~after(as_xpr("È") >> as_xpr(". ")) >> ~after(as_xpr("É") >> as_xpr(". ")) >>
~after(as_xpr("Ê") >> as_xpr(". ")) >> ~after(as_xpr("Ë") >> as_xpr(". ")) >> ~after(as_xpr("Ì") >> as_xpr(". ")) >>
~after(as_xpr("Í") >> as_xpr(". ")) >> ~after(as_xpr("Î") >> as_xpr(". ")) >> ~after(as_xpr("Ï") >> as_xpr(". ")) >>
~after(as_xpr("Ñ") >> as_xpr(". ")) >> ~after(as_xpr("Ò") >> as_xpr(". ")) >> ~after(as_xpr("Ó") >> as_xpr(". ")) >>
~after(as_xpr("Ô") >> as_xpr(". ")) >> ~after(as_xpr("Õ") >> as_xpr(". ")) >> ~after(as_xpr("Ö") >> as_xpr(". ")) >>
~after(as_xpr("Ø") >> as_xpr(". ")) >> ~after(as_xpr("Ù") >> as_xpr(". ")) >> ~after(as_xpr("Ú") >> as_xpr(". ")) >>
~after(as_xpr("Û") >> as_xpr(". ")) >> ~after(as_xpr("Ü") >> as_xpr(". ")) >> ~after(as_xpr("Ý") >> as_xpr(". ")) ) >>
(boost::xpressive::set= 'm', 'M') >> '.' >>
(~before(as_xpr(" ") >> range('A', 'Z') >> as_xpr(". ")) >>
~before(as_xpr(" ") >> as_xpr("À") >> as_xpr(". ")) >> ~before(as_xpr(" ") >> as_xpr("Á") >> as_xpr(". ")) >>
~before(as_xpr(" ") >> as_xpr("Â") >> as_xpr(". ")) >> ~before(as_xpr(" ") >> as_xpr("Ã") >> as_xpr(". ")) >>
~before(as_xpr(" ") >> as_xpr("Ä") >> as_xpr(". ")) >> ~before(as_xpr(" ") >> as_xpr("Å") >> as_xpr(". ")) >>
~before(as_xpr(" ") >> as_xpr("Ç") >> as_xpr(". ")) >> ~before(as_xpr(" ") >> as_xpr("È") >> as_xpr(". ")) >>
~before(as_xpr(" ") >> as_xpr("É") >> as_xpr(". ")) >> ~before(as_xpr(" ") >> as_xpr("Ê") >> as_xpr(". ")) >>
~before(as_xpr(" ") >> as_xpr("Ë") >> as_xpr(". ")) >> ~before(as_xpr(" ") >> as_xpr("Ì") >> as_xpr(". ")) >>
~before(as_xpr(" ") >> as_xpr("Í") >> as_xpr(". ")) >> ~before(as_xpr(" ") >> as_xpr("Î") >> as_xpr(". ")) >>
~before(as_xpr(" ") >> as_xpr("Ï") >> as_xpr(". ")) >> ~before(as_xpr(" ") >> as_xpr("Ñ") >> as_xpr(". ")) >>
~before(as_xpr(" ") >> as_xpr("Ò") >> as_xpr(". ")) >> ~before(as_xpr(" ") >> as_xpr("Ó") >> as_xpr(". ")) >>
~before(as_xpr(" ") >> as_xpr("Ô") >> as_xpr(". ")) >> ~before(as_xpr(" ") >> as_xpr("Õ") >> as_xpr(". ")) >>
~before(as_xpr(" ") >> as_xpr("Ö") >> as_xpr(". ")) >> ~before(as_xpr(" ") >> as_xpr("Ø") >> as_xpr(". ")) >>
~before(as_xpr(" ") >> as_xpr("Ù") >> as_xpr(". ")) >> ~before(as_xpr(" ") >> as_xpr("Ú") >> as_xpr(". ")) >>
~before(as_xpr(" ") >> as_xpr("Û") >> as_xpr(". ")) >> ~before(as_xpr(" ") >> as_xpr("Ü") >> as_xpr(". ")) >>
~before(as_xpr(" ") >> as_xpr("Ý") >> as_xpr(". ")) )
如前所述,这很丑陋,但这克服了xpressive
的局限性,无法与UTF8字符一起使用。
相关文章:
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 在类定义之后定义一个私有方法
- 在循环C++中指定字符串之后,不会打印该字符串
- C++宏忽略之后的内容
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- strncpy之后的char数组的错误行为
- 计算十进制 c++ 之后的数字
- "x += x--"之后的 x 是什么?
- 类的前向声明之后的类成员函数定义,在类声明之前
- 为什么将双精度转换为 int 似乎在第 16 位数字之后将其四舍五入?
- execlp() 在 fork() 之后无法正常工作
- 我认为我的代码很好,但它在 cin a 之后停止并且没有进一步?
- 如何在MISRA C++之后实施CRTP
- 在 OpenCV 的 namedWindow 之前或之后初始化 Tesseract
- 检测到堆损坏:在正常块 c++ 动态 2D 数组之后
- C++ 如果在 if 为 true 之后运行,为什么还会这样做
- 在 fork() 之后,我在我的程序中不断得到相同的 pid
- OpenSSL C API:如何在程序exec()之后恢复TLS连接?
- 了解在返回值之前和之后使用 EAX 的函数调用
- 提升Xpressive-无法在(Qualt)之后使用