3

我已经在我的 Android 应用程序中添加了表情符号,并且我一直在使用 Java 中的 Regex,因此分配给它们的代码将匹配正则表达式(其中包含一对要使用的分隔符),使字符显示为图片。

例如,一些表情符号代码是sadhappysmile

到目前为止,它是这样的:

  • 分隔符:()

  • 正则表达式:\\(([.[^\\(\\)]]+)\\)

  • 匹配的表情符号代码示例:(sad), (happy), (smile).

我注意到,对于我添加的一些新表情符号,用户使用另一对分隔符(如字母z,. 那么,第二种情况是这样的:

  • 分隔符:z,

  • 正则表达式:z([.[^z\\,]]+)\\,

  • 匹配的表情符号代码示例:zsad,, zhappy,, zsmile,.

那么,我想要的是合并这两个正则表达式,因此用户可以使用两对分隔符中的任何一个输入表情符号代码,无论他或她喜欢哪个,它都会被匹配。例如,悲伤的表情符号将被匹配,并且每次写为(sad)or时它都会显示为图像zsad,,例如:

你好。(伤心)我有坏消息。扎德,

嘿…… (伤心)

好的。再见。扎德,

我尝试过使用交替运算符和环视,但没有成功。在以下两个正则表达式中,我只匹配了|交流发电机的左侧(当然,我希望左侧和右侧都匹配):

\\(([.[^\\(\\)]]+)\\)|z([.[^z\\,]]+)\\,

z([.[^z\\,]]+)\\,|\\(([.[^\\(\\)]]+)\\)

在以下正则表达式中,我根本没有匹配项:

(\\(([.[^\\(\\)]]+)\\)|z([.[^z\\,]]+)\\,),(\\(([.[^\\(\\)]]+)\\))|(z([.[^z\\,]]+)\\,)

(z([.[^z\\,]]+)\\,|\\(([.[^\\(\\)]]+)\\)),(z([.[^z\\,]]+)\\,)|(\\(([.[^\\(\\)]]+)\\))

\\(|z([.[^\\(\\z\\,)]]+)\\)|\\,,(\\(|z)([.[^\\(\\z\\,)]]+)(\\)|\\,) (\\()|(z)([.[^\\(\\z\\,)]]+)(\\))|(\\,)

(?=\\(([.[^\\(\\)]]+)\\))(?=z([.[^z\\,]]+)\\,),(?=.*\\(([.[^\\(\\)]]+)\\))(?=.*z([.[^z\\,]]+)\\,)

对不起,我只想提供尽可能多的细节。有谁知道我在做什么或写错了,我可以使用什么正则表达式来匹配 zemojicode, and (emojicode)您的帮助将不胜感激。

4

3 回答 3

1

我可能会去

\((\w+)\)|z(\w+),

我发现它更简单,并且作为您自己的尝试,只需捕获实际的令牌。也允许在令牌中使用\w数字和下划线,我不知道您是否认为这是一个加号,但几乎不应该是一个缺点(?)。

所以作为一个java字符串:

 \\((\\w+)\\)|z(\\w+),

在这里查看,在 regex101

作为替代方案,我想提一下这个:

[(z](\w+)[),]

它甚至更简单,但没有内置的语法检查。换句话说,它将允许分隔符的组合,例如(sad,zhappy),这可能被认为是一个缺点。

问候

于 2016-04-25T10:53:33.063 回答
0

你可以使用这样的东西:

(z[a-zA-Z]*,|\([a-zA-Z]*\))

这是示例

它将捕获z<anylettershere>,(<anylettershere>)

要匹配消息中的多个 1,请使用 global,这可能是必需的,它包含在示例链接中。它与您在我发现的 3 个单独的 Java 正则表达式测试器上提供的句子相匹配。

编辑

请注意,任何\字符都可能需要加倍。我主要使用 PHP,而不是 Java,所以我对此并不了解,但给出的示例将变为:

(z[a-zA-Z]*,|\\([a-zA-Z]*\\))
于 2016-04-25T10:34:06.087 回答
0

Java 不允许您对捕获组使用重复名称,也没有分支重置支持,也没有条件表达式。您需要使用交替,然后根据您需要如何处理匹配项来采取行动。

所以,使用这个正则表达式:

\(([.[^()]]+)\)|z([.[^z,]]+),

不要忘记在 Java 代码中使用双反斜杠。

检查这个仅处理匹配值的演示

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,>>
于 2016-04-25T11:22:57.110 回答