小编jav*_*led的帖子

索引nnn附近的未闭合字符类

我正在从一些PHP Textile实现(开源,正确归因)中借用一个相当复杂的正则表达式,用于一个简单的,不完全特征完整的Java实现,textile4j,我正在移植到github并同步到Maven central(原始代码是编写为blojsom提供插件,这是一个Java博客平台;这是在Maven Central中提供blojsom依赖项的更大努力的一部分.

不幸的是,纺织品正则表达式(虽然它们preg_replace_callback在PHP 中的上下文中工作)在Java中失败,但有以下异常:

java.util.regex.PatternSyntaxException: Unclosed character class near index 217

声明很明显,解决方案难以捉摸.

这是来自PHP实现的原始多行正则表达式:

return preg_replace_callback('/
    (^|(?<=[\s>.\(])|[{[]) # $pre
    "                      # start
    (' . $this->c . ')     # $atts
    ([^"]+?)               # $text
    (?:\(([^)]+?)\)(?="))? # $title
    ":
    ('.$this->urlch.'+?)   # $url
    (\/)?                  # $slash
    ([^\w\/;]*?)           # $post
    ([\]}]|(?=\s|$|\)))
    /x',callback,input);
Run Code Online (Sandbox Code Playgroud)

巧妙的是,我得到了纺织类来"显示我在这个正则表达式中使用的代码",其中一个简单的echo结果导致了以下相当长的正则表达式:

(^|(?<=[\s>.\(])|[{[])"((?:(?:\([^)]+\))|(?:\{[^}]+\})|(?:\[[^]]+\])|(?:\<(?!>)|(?<!<)\>|\<\>|\=|[()]+(?! )))*)([^"]+?)(?:\(([^)]+?)\)(?="))?":([\w"$\-_.+!*'(),";\/?:@=&%#{}|\^~\[\]`]+?)(\/)?([^\w\/;]*?)([\]}]|(?=\s|$|\)))
Run Code Online (Sandbox Code Playgroud)

我发现了一些可能导致解析错误的可能区域,使用gskinnerRegexPlanetRegExr等在线工具.但是,这些细节都没有解决错误.

我怀疑其中一个字符类中隐藏了一个范围问题,或隐藏在某个地方的Unicode命令,但我找不到它.

有任何想法吗?

我也很好奇为什么PHP不会抛出类似的错误,例如,我发现一个"被动子表达式"使用RegExr处理不当,但它没有修复Java异常并且没有改变PHP中的行为,显示下面.

#title转换逃脱的paren:

        (?:\(([^)]+?)\)(?="))? # $title
        ...^
        (?:(\([^)]+?)\)(?="))? # $title
        ....^
Run Code Online (Sandbox Code Playgroud)

蒂姆,谢谢

编辑:添加Tex …

php java regex regexbuddy

5
推荐指数
1
解决办法
2万
查看次数

始终触摸单个文件的mergeinfo

我有几个文件似乎总是svn:mergeinfo在通过合并的常规工作周期执行的各种合并任务上获得新设置.

该文件在几个月内没有变化,但是持久触摸了mergeinfo.我有一种感觉,mergeinfo在某些时候感到困惑,从未恢复过.我不知道该找什么来破解mergeinfo并纠正,或者只是删除它并继续前进.

有小费吗?

svn mergeinfo

4
推荐指数
1
解决办法
489
查看次数

标签 统计

java ×1

mergeinfo ×1

php ×1

regex ×1

regexbuddy ×1

svn ×1