如何使用正则表达式解析ICU本地化消息格式



我有以下模式:

{remainingUsers, plural, =1 {# more agent} other {# more agents}}. Use the search to refine further.

Hello, Your friend {friend} is now online.     {gender, select,    female {She}    male {He}    other {They}} 

我正试图获得括号内的内容。对于第一个:;更多代理";以及";更多代理人";对于第二个:";她"他"以及";他们";

我试图重复一个非捕获组,结果得到了以下正则表达式:

.*{.*(?:{#?s?(.*)})+}.*

但这只捕捉到了最后一次。对于第一行,它捕获";更多代理人";而对于第二个;他们"。

我可以只使用正则表达式来解决这个问题吗?

谢谢。

假设您使用的是符合PCRE的正则表达式引擎,则可以使用

(?:G(?!^)}|{)[^{}]*{K[^{}]*

请参阅regex演示详细信息

  • (?:G(?!^)}|{)-上一个匹配的结束,然后是}字符(G(?!^)}(或(|({字符
  • [^{}]*-除{}之外的零个或多个字符
  • {-一个{字符
  • K-省略迄今为止匹配的所有内容
  • [^{}]*-除{}之外的零个或多个字符

重复捕获组只捕获最后一个匹配的事件。

如果必须只捕获括号内的内容,那么带有g标志的regex就可以完成这项工作。

但在您的情况下,由于您只需要在外括号中查找出现,因此需要手动循环匹配。

如果你知道你可能只有两个级别的嵌套括号(就像你的例子中一样(,你可以很容易地首先搜索外括号:/{(([^{}]*|{[^}]*})+)}/g
请参阅您的示例
然后,对于上面regexp的每个匹配项(第一组(,运行/{#?s?([^}]*)}/g以获取内括号内的内容
请参阅您的示例。

相关内容

  • 没有找到相关文章

最新更新