我已经将emojis添加到我的Android应用程序中,并且我一直在使用Java中的Regex,因此分配给它们的代码将匹配正则表达式(其中包含一对要使用的分隔符),从而制作角色显示为图像。
某些表情符号代码例如是sad
,happy
,smile
。
到目前为止,它是这样的:
分隔符:(
和)
正则表达式:\\(([.[^\\(\\)]]+)\\)
匹配的表情符号代码示例:(sad)
,(happy)
,(smile)
。
我注意到,对于我添加的一些新的表情符号,用户使用另一对分隔符(如字母z
和{{1})键入代码会更实用}。然后,第二种情况是这样的:
分隔符:,
和z
正则表达式:,
匹配的表情符号代码示例:z([.[^z\\,]]+)\\,
,zsad,
,zhappy,
。
我想要的是合并这两个正则表达式,因此用户可以使用两个分隔符中的任意一个来键入表情符号代码,无论他们喜欢哪个,它都会匹配即可。例如, sad 表情符号将被匹配,每当它被写为zsmile,
或(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,
非常感谢您的帮助。
答案 0 :(得分:1)
我可能会选择
\((\w+)\)|z(\w+),
我觉得更简单,并且,作为您自己的尝试,只需捕获实际的令牌。 \w
允许在令牌中使用数字和下划线,如果您考虑加号,我不知道,但这应该是一个缺点(?)。
所以作为一个java字符串:
\\((\\w+)\\)|z(\\w+),
Check it out here, at regex101
作为替代方案,我想提一下这个:
[(z](\w+)[),]
它更简单,但没有内置的语法检查。换句话说,它将允许分隔符的组合,例如, (sad,
和zhappy)
,这可能被视为一个缺点。
此致
答案 1 :(得分:0)
您可以使用以下内容:
(z[a-zA-Z]*,|\([a-zA-Z]*\))
这里是example
它会捕获z<anylettershere>,
或(<anylettershere>)
要在消息中匹配多个1,请使用可能需要的global,并将其包含在示例链接中。它与我提供的3个独立的Java正则表达式测试器上提供的句子相匹配。
修改强>
只需注意,任何\
字符都可能需要加倍。我主要使用的是PHP,而不是Java,所以我对此并不了解,但是给出的例子会变成:
(z[a-zA-Z]*,|\\([a-zA-Z]*\\))
答案 2 :(得分:0)
Java不允许您对捕获组使用重复名称,也不允许使用分支重置支持,也不允许使用条件表达式。您需要使用交替,然后根据您需要处理匹配的方式采取行动。
所以,请使用此正则表达式:
\(([.[^()]]+)\)|z([.[^z,]]+),
不要忘记在Java代码中加倍反斜杠。
选中仅处理匹配值的this demo :
String s = "Hi. (sad) I've got bad news. zsad,\nHey... (sad)\nOkay. Bye. zsad,";
System.out.println(s.replaceAll("\\(([.[^()]]+)\\)|z([.[^z,]]+),", "<<$0>>"));
输出:
Hi. <<(sad)>> I've got bad news. <<zsad,>>
Hey... <<(sad)>>
Okay. Bye. <<zsad,>>