1

我很难理解应该如何编写特定的 Java 正则表达式。正则表达式将按顺序使用,并将匹配以/.

问题是使用简单的拆分不起作用,因为 . 之前的文本/可以选择用~. 如果是,那么里面的文本可以匹配任何东西——包括/and ~。这里的关键是结尾~/,如果它以~.

因为正则表达式模式将在序列中使用(即(xxx)+),所以我不能使用^or$进行非贪婪匹配。

示例匹配:

  • foo/
  • ~foo~/
  • ~foo/~/
  • ~foo~~/
  • ~foo/bar~/

还有一些不匹配的:

  • foo~//
  • ~foo~/bar~/
  • ~foo/
  • foo~/(见编辑2)

有什么方法可以做到这一点而不会与我的正则表达式重复吗?考虑匹配这个的最佳方式是什么?Java 没有条件修饰符 ( ?),所以我脑子里的事情变得更复杂了。

编辑:在此期间进行此工作后,正则表达式((?:\~())?)(((?!((?!\2)/|\~/)).)+)\1/ 接近但#6 不匹配。

编辑 2:在史蒂夫指出存在歧义之后,很明显 #6 不应该匹配。

4

1 回答 1

1

我不认为这是一个可以解决的问题。根据您的给定,这些都是可以接受的:

~foo/~/
~foo/
foo~/

所以,现在,让我们考虑这个组合:

~foo/foo~/

这里会发生什么?我们结合了第二个示例和第三个示例来创建第一个示例的实例。您如何建议正确的拆分?据我所知,没有办法判断我们是否应该将整个表达式视为一个两个有效表达式。因此,我认为不可能根据您列出的限制准确地分解它。

于 2013-07-02T16:11:44.987 回答