【发布时间】:2016-08-18 15:58:58
【问题描述】:
我已经在我的 Android 应用程序中添加了表情符号,并且我一直在使用 Java 中的 Regex,因此分配给它们的代码将匹配正则表达式(其中包含一对要使用的分隔符),从而使字符显示为图像。
一些表情符号代码是,例如,sad、happy、smile。
到目前为止,情况是这样的:
-
分隔符:
(和) -
正则表达式:
\\(([.[^\\(\\)]]+)\\) -
匹配的表情符号代码示例:
(sad)、(happy)、(smile)。
我注意到,对于我添加的一些新表情符号,用户使用另一对分隔符键入代码会更实用,例如字母 z 和 ,。那么,第二种情况是这样的:
-
分隔符:
z和, -
正则表达式:
z([.[^z\\,]]+)\\, -
匹配的表情符号代码示例:
zsad,、zhappy,、zsmile,。
然后,我想要的是合并这两个正则表达式,这样用户就可以使用两对分隔符中的任何一个输入表情符号代码,无论他或她喜欢哪个,它都会匹配。例如,sad 表情符号将被匹配,并且每次写成(sad) 或zsad, 时都会显示为图像,例如:
嗨。 (悲伤)我有坏消息。 zsad,
嘿... (悲伤)
好的。再见。 zsad,
我尝试过使用交替运算符和环视,但没有成功。在以下两个正则表达式中,我只匹配了 | 交流发电机的左侧(当然,我希望左侧和右侧都匹配):
\\(([.[^\\(\\)]]+)\\)|z([.[^z\\,]]+)\\,
z([.[^z\\,]]+)\\,|\\(([.[^\\(\\)]]+)\\)
在以下正则表达式中,我根本没有匹配项:
(\\(([.[^\\(\\)]]+)\\)|z([.[^z\\,]]+)\\,), (\\(([.[^\\(\\)]]+)\\))|(z([.[^z\\,]]+)\\,)
(z([.[^z\\,]]+)\\,|\\(([.[^\\(\\)]]+)\\)), (z([.[^z\\,]]+)\\,)|(\\(([.[^\\(\\)]]+)\\))
\\(|z([.[^\\(\\z\\,)]]+)\\)|\\,, (\\(|z)([.[^\\(\\z\\,)]]+)(\\)|\\,) (\\()|(z)([.[^\\(\\z\\,)]]+)(\\))|(\\,)
(?=\\(([.[^\\(\\)]]+)\\))(?=z([.[^z\\,]]+)\\,), (?=.*\\(([.[^\\(\\)]]+)\\))(?=.*z([.[^z\\,]]+)\\,)
对不起,我只想提供尽可能多的细节。有谁知道我在做什么或写错了,我可以使用什么正则表达式来匹配 zemojicode, 和 (emojicode)? 非常感谢您的帮助。
【问题讨论】:
-
Java 不允许您对捕获组使用重复名称,也没有分支重置支持,也没有条件表达式。您需要使用交替,然后根据您需要处理匹配项的方式采取行动:
\(([.[^()]]+)\)|z([.[^z,]]+),(在 Java 中将反斜杠加倍,当然,这个可以在 online Java regex tester 处使用)。检查this demo -
顺便说一句,为什么你的图案中有一个点?
-
我将我的评论转化为答案。
标签: java regex delimiter regex-lookarounds regex-alternation