你好,这个问题是问题的延续
简而言之,要从字符串中选择变量及其格式,我使用模式
Pattern = "\{([^:{]+)(:[^{}]+)?\}"
当前使用的模式分配了 2 个组,但有必要再引入一个 OPTIONAL 组。
var str ="0x57{Nbyte(а-С):X2}hhh"
Groups[0] = {Nbyte(а-С):X2}
Groups[1] = Nbyte
Groups[2] = (а-С) - новая группа
Groups[3] = :X2
1 группа - выделяет имя переменной (исключая 2 симола :{) - ([^:{]+)
2 группа - должна быделить НЕ ОБЯЗАТЕЛЬНЫЕ опции заключенные в () или []. внутри опций может быть симол : но не может быть символов {}
3 группа - выделяет формат (вместе с :) исключая симолы {} - (:[^{}]+)
例子:
var str ="0x57{Nbyte:X2}hhh"
Groups[0] = {Nbyte:X2}
Groups[1] = Nbyte
Groups[2] =
Groups[3] = :X2
var str ="0x57{Nbyte}hhh"
Groups[0] = {Nbyte}
Groups[1] = Nbyte
Groups[2] =
Groups[3] =
var str ="0x57{Nbyte[:-+]:X2}hhh"
Groups[0] = {Nbyte[:-+]:X2}
Groups[1] = Nbyte
Groups[2] = [:-+]
Groups[3] =:X2
var str ="0x57{Nbyte[:-+]}hhh"
Groups[0] = {Nbyte[:-+]}
Groups[1] = Nbyte
Groups[2] = [:-+]
Groups[3] =
var str ="0x57{Nbyte[{hghfghgtf]:X2}hhh"
- опции не валидны, т.к. внутри [] содержится симол {
PS请在回答中写下关于常规赛的详细评论。
您可以使用
查看正则表达式如何工作的示例。
细节
\{
- 开口支架(\w+)
- 第 1 组:1+ 字母、数字、_(\([^(){}]*\)|\[[^][{}]*])?
- 可选组,查找\([^(){}]*\)
- , , ,和,(
以外的 0+ 个字符(
)
{
}
)
|
-\[[^][{}]*]
- , , ,和,[
以外的 0+ 个字符[
]
{
}
]
(:[^{}]+)?
- 可选组,查找除and:
之外的 1+ 个字符{
}
}
- 右括号。