Regex 如何匹配由'+'-标志?
我正在使用这个正则表达式Regex 如何匹配由'+'-标志?,regex,Regex,我正在使用这个正则表达式(\(?(F[0-9]{3}+?\-)+([a-zA-Z0-9]{3}+?\)*\)?v?+/code> 我要匹配的字符串示例: F123 F123+098 F123+YYY F123+F456+890+456 F123+F456+890+-456 (F123+F456+890+456)伏(F123) (F123+F456+890+456)伏(F123+098) 我不想匹配的字符串示例: F1234+ F123+ F123+098+ F123+456789 (F12
(\(?(F[0-9]{3}+?\-)+([a-zA-Z0-9]{3}+?\)*\)?v?+/code>
我要匹配的字符串示例:
- F123
- F123+098
- F123+YYY
- F123+F456+890+456
- F123+F456+890+-456
- (F123+F456+890+456)伏(F123)
- (F123+F456+890+456)伏(F123+098)
我不想匹配的字符串示例:
- F1234+
- F123+
- F123+098+
- F123+456789
- (F123+F456+890+456)vF123)
- (F123+F456+890+456)伏(F123+09898)
- (F123+F456+890+456)伏(F123+098)
我想我需要某种消极的前瞻性,以确保如果我匹配第二个组,则中间有一个+
,如果我匹配一个新实例,则中间有一个)v(
),但我似乎不知道如何匹配
我还想确保它只在整个输入匹配Regex时匹配
可能有帮助:可能有一种选择是使用重复组和an来匹配不带开始括号和结束括号的零件,并将零件与v位于中间的括号相匹配
^(?:F[0-9]{3}(?:\+-?F[0-9]{3})*(?:\+-?[0-9a-zA-Z]{3})*$|\(F[0-9]{3}(?:\+-?F[0-9]{3})*(?:\+-?[0-9a-zA-Z]{3})*\)v\(F[0-9]{3}(?:\+-?F[0-9]{3})*(?:\+-?[0-9a-zA-Z]{3})*\))$
部分地
^
字符串的开头
(?:
非捕获组
F[0-9]{3}
匹配F和3位数字
(?:\+-?F[0-9]{3})*
重复0+次a+
,可选-
,F和3位数字
(?:\+-?[0-9a-zA-Z]{3})*
重复0+次a+
,可选的-
和和3次所列的任何一项
|
或
\(
匹配(
F[0-9]{3}
匹配F和3位数字
(?:\+-?F[0-9]{3})*
重复0+次+
,可选-
,F和3位数字
(?:\+-?[0-9a-zA-Z]{3})*
匹配0+次+
,可选-
和3次任何列出的
\)v\(
匹配)v(
F[0-9]{3}
匹配F和3位数字
(?:\+-?F[0-9]{3})*
匹配0+次+
,可选-
,F和3位数字
(?:\+-?[0-9a-zA-Z]{3})*
匹配0+次+
,可选-
和3次任何列出的
\)
匹配)
)
关闭非捕获组
$
字符串结尾
p>你是我的英雄,你是我的英雄,你是我的帐户,我的帐户,字母和+-我结束了:<代码>(p>你是我的英雄,你是我的英雄,你是我的帐户,我是我的英雄,你是我的英雄,你是我的帐户,你是我是我的帐户,你是我是我的,你是我是我的帐户,你是我的帐户,我是我的帐户,我的字母和+-你是我是我的帐户和+-你是我的,你是我的,你是我是我是我的,你是我是我的英雄,你是我是我的英雄,你是我是我是我的英雄,你是我是我是我是我的英雄,你是我是我的英雄,我是我是我的英雄,我是我是我的英雄,我是我是我的帐户,我是我是我的帐户,我是我是我是我的英雄,以以9]{3})*\))$
您可以根据您的要求对其进行调整。是否应该只有-
或+
或两者都有?在这种情况下,您可以使用字符类[-+]?
来选择性地匹配两者中的一个。始终存在+
或有时存在+-