我无法理解应该如何编写特定的Java正则表达式。正则表达式将在序列中使用,并匹配以/
结尾的部分。
问题是使用简单拆分不起作用,因为/
之前的文本可以选择由~
包围。如果是,则内部文本可以匹配任何内容 - 包括/
和~
。这里的关键是结尾~/
,如果它以~
开头,这是逃避这个“任何事情”序列的唯一方法。
因为正则表达式模式将用于序列(即(xxx)+
),所以我无法使用^
或$
进行非贪婪匹配。
示例匹配:
foo/
~foo~/
~foo/~/
~foo~~/
~foo/bar~/
以及一些不匹配的内容:
foo~//
~foo~/bar~/
~foo/
foo~/
(参见编辑2)有没有办法做到这一点,而不是多余的我的正则表达式?考虑匹配这个的最佳方法是什么? Java没有条件修饰符(?
),所以我脑子里的东西更复杂了。
编辑:在此期间处理此问题后,正则表达式((?:\~())?)(((?!((?!\2)/|\~/)).)+)\1/
gets close但#6不匹配。
编辑2 :史蒂夫指出存在歧义之后,很明显#6应该不匹配。
答案 0 :(得分:1)
我认为这不是一个可以解决的问题。从您的数量来看,这些都是可以接受的:
~foo/~/
~foo/
foo~/
所以,现在,让我们考虑一下这个组合:
~foo/foo~/
这里发生了什么?我们结合了第二个示例和第三个示例来创建第一个示例的实例。你如何建议正确分裂?据我所知,没有办法告诉我们是否应该将整个表达式作为一个或两个有效表达式。因此,我认为不可能根据您列出的限制准确地分解它。