- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个带有几个(可选)捕获组的正则表达式。我正在尝试添加一项新功能,允许用户将内容添加到与正则表达式的右括号匹配的捕获组之一。我很难忽略这场比赛
当前正则表达式为 /\[(.+?)=(.+?)(?:\|(.+?))?(?:\:(.+?))?\]/g
这允许用户根据以下内容定位数据:
[key=value|filter:filtervalue]
其中filter和filtervalue是可选的。
问题是,对于该值,现在应该可以将数组中的索引作为目标。例如:
[data=example(products[0].id)]
但是,正则表达式仅匹配 .id
,因此第二个捕获组是 example(products[0
)。我希望它是 example( products[0].id)
。我想如果我可以忽略用括号括起来的右括号,应该没问题,但我一直不知道如何实现。
应匹配的示例:
[data=example(products[0].id)]
[data=example(products[index].id)]
[data=regular]
[data=test|number:2]
我创建了一个regex101 。如有任何帮助,我们将不胜感激。
最佳答案
您可以使用
/\[([^=\]]+)=((?:\[[^\][]*]|[^\]])+?)(?:\|([^:\]]+):((?:\[[^\][]*]|[^\]])+?))?]/g
请参阅regex demo
请注意,惰性点匹配模式被替换为更具限制性的否定字符类,以确保括号字符串的一个部分不会溢出到另一部分。为了允许匹配第一级嵌套 [...]
子字符串,使用 \[[^\][]*]|[^\]]
模式来匹配使用 [...]
或非 ]
子字符串。
详细信息:
\[
- 文字 [
([^=\]]+)
- 第 1 组捕获除 =
和 ]
之外的 1 个以上字符=
- =
符号((?:\[[^\][]*]|[^\]])+?)
- 第 2 组捕获 1+ 次出现(尽可能少):
\[[^\][]*]
- [
,然后是 ]
和 [< 之外的 0+ 个字符
,然后 ]
|
- 或[^\]]
- 除 ]
(?:\|([^:\]]+):((?:\[[^\][]*]|[^\]])+?))?
- 可选的组匹配:
\|
- |
字符([^:\]]+)
- 第 3 组捕获除 :
和 ]
之外的 1 个以上字符:
- 冒号((?:\[[^\][]*]|[^\]])+?)
- 第 4 组捕获与第 2 组相同的文本。]
- 文字 ]
字符。关于JavaScript 正则表达式 : Ignore closing bracket when enclosed in parentheses,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41591534/
template class Vec { T data[S]; public: constexpr Vec(const T& s) : data{s} {} }; templ
我需要不同的参数集,所以我决定使用 @Enclosed .但是,嵌套类必须是静态的,因此方法调用的所有现有方法/常量都必须是静态的。但这很难,因为我无法更改所有这些方法的定义。 有没有什么方法可以不用
编译本规范时: import org.specs.Specification import org.specs.matcher.extension.ParserMatchers class Parse
想法:制作一个内联便捷函数,以同步“内联”对象的固有锁上的函数调用: public inline fun intrinsicSync(block: () -> T): T { return
我有一个如下所示的二维数组: var map = [ [0,0,0,0,0,0,0,0,0,0], [2,2,2,0,0,0,0,0,0,0], [2,2,2,0,2,2,0,
我的项目有问题。我有 2 个类:MainActivity 和 Insert。我在“插入”类中出现错误。 对话框 = new ProgressDialog(MainActivity.this); 我的错
我正在使用 EXCEL 创建一组 UPDATE 语句。许多行的列中包含单引号字符作为字段值的一部分。有没有办法告诉 MySQL 使用“或 ' 之外的不同 ENCLOSURE 字符? 如果能够将角色从标
我正在尝试向 C# 应用程序添加一些新功能 - 特别是,试图复制它的某些行为,但在 Web 浏览器中,而不是像现在这样在应用程序中。 我试图从 MainWindow.cs 类中的方法内部调用在 Bro
复制者: enum IDs { ID { @Override void getId() { w(); // warning here
在 Eclipse 中,当您创建一个类时,有一个复选框显示“封闭类型”。有谁知道它的作用?我附上了截图。 最佳答案 您可以添加 nested class使用 Enclosing type 选项 例如类
这个问题在这里已经有了答案: Is not an enclosing class Java (12 个答案) 关闭 8 年前。 嘿,这是我第一次使用堆栈溢出,我试图在不同的文件中调用一个类(Main
我需要 Select 查询,它会在最后将结果写入文件。我希望输出列用双引号分隔,并且我希望在字段之间有逗号,但是我得到一个查询不正确的错误。 select hostname,ip FIELDS TER
这是我收到错误的代码:错误:不是封闭类:MainActivity。请帮我看看我的代码有什么问题。 public class MyFirebaseMessagingSerivce extends Fir
我有一个以下列类开头的 libgdx 程序: public class MyActivity extends AndroidApplication implements IActivityReques
我在执行以下代码时遇到问题。 实际上,我想使用图像作为指向另一个页面或 Activity 的链接。这是怎么做到的 和 “MainActivity.this 不是封闭类”的问题究竟是什么?这是代码 我有
我有 tsv 形式的数据,我想将它插入到 hbase 中,问题是每个字段都用“'”(单引号)括起来。 如何在导入命令中提供它: hbase org.apache.hadoop.hbase.mapred
我正在阅读文档:https://docs.flutter.io/flutter/widgets/BuildContext-class.html This can lead to some tricky
同学们,我有这样一个问题:1. 在我的第一个类中,我有 public class parseYouTubeAndYahoo extends AsyncTask> 解析来自互联网的数据。但是我需要从另一
Akka 文档记录了使用 Props 的危险变体: // NOT RECOMMENDED within another actor: // encourages to close over enclo
我创建了一个 Eclipse 插件,可以在按下快捷键时打印输出选择的对象。我已经能够做到这一点,但我还想在日志中添加当前方法和当前类名称。我不知道如何进一步进行。我尝试搜索面包屑 API,但无法从我的
我是一名优秀的程序员,十分优秀!