我有以下模式:
{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
以获取内括号内的内容
请参阅您的示例。