2011-01-29 129 views

回答

1

鉴于问题的是,答案是否定的,因为设置x = Pattern.LITERAL导致在第二个表达式中引用s两次。用双引号和s="A"字符串"A"将不匹配,但字符串"\\QA\\E"将。然而,

Pattern.compile(s, x | Pattern.LITERAL) 

似乎等同于

Pattern.compile(Pattern.quote(s), x & ~Pattern.LITERAL) 
0

尽管我没有看到它的问题,但我并不相信将任意模式标志与整个模式引用的东西一起使用。 documentation提到它会渲染所有的标志,但最终会有两个多余的标志。我认为这将是好的,但颜色我méfiant - 不信任。

您是否尝试过使用\Q … \E来模拟那些您希望引用非元元素的部分,可以这么说?

+0

我读过的文档两次,现在还不清楚。这两个描述相似但不完全相同,OTOH,我没有看到真正的区别。在引用文档中,他们写道“好像它是一个字面模式”,并且没有关于案例的任何内容。我知道\ Q .. \ E,这就是Pattern.quote实际工作的方式。 – maaartinus 2011-01-29 23:18:28

3

简答:对于你的例子,是的。

长答案:是的,但是Pattern.quote更加灵活。如果你只想要一些引用你的模式呢?像:

Pattern.compile(Pattern.quote(s) + "+", x) 

除了设置Pattern.LITERAL标志,甚至+字符现在将字面上处理。

如果您不信任该文档,可能会在Google Code Search上搜索the source code以获得Pattern.compile帮助。

从我可以从查看源代码获得:

  • 如果文字标志集,不顾一切其他标志,它会寻找任何\ Q ... \ E引用块并手动转义特殊字符,就像人们所期望的那样。

  • 如果文字标志设置,将整个模式使用newSlice方法进行转换,并有特殊情况,至少在CASE_INSENSITIVE标志和UNICODE_CASE标志

+0

你说“是”,但没有理由。我知道灵活性。 – maaartinus 2011-01-29 23:20:18

相关问题