Regex 正则表达式-如果字符串的任何部分不';不符合模式

Regex 正则表达式-如果字符串的任何部分不';不符合模式,regex,Regex,我有一个逗号分隔的字符串,我想用正则表达式验证它。我所写的是,如果字符串后面有一个部分出错,则会给我一个匹配项。如果有什么地方出了问题,我想把它完全扔掉 我的正则表达式:^(?[\w\.]+,{1}(?:STR | INT | REAL){1},{1}(\s*|$)+ 阳性病例:Component,STR,YoungGenUse,STR,YoungGenMax,STR,OldGenUse,INT,OldGenMax,INT,PermGenUse,INT,PermGenMax,INT,MajCol

我有一个逗号分隔的字符串,我想用正则表达式验证它。我所写的是,如果字符串后面有一个部分出错,则会给我一个匹配项。如果有什么地方出了问题,我想把它完全扔掉

我的正则表达式:
^(?[\w\.]+,{1}(?:STR | INT | REAL){1},{1}(\s*|$)+

阳性病例:Component,STR,YoungGenUse,STR,YoungGenMax,STR,OldGenUse,INT,OldGenMax,INT,PermGenUse,INT,PermGenMax,INT,MajCollCnt,INT,MinCollDur,REAL,MinCollCnt,INT

否定情况: 组件,STR,YoungGenUse,STR,YoungGenMax,测试,OldGenUse,INT,OldGenMax,INT,permgenese,INT,permgenemax,INT,MajCollCnt,INT,MinCollDur,REAL,MinCollCnt,INT


对于第二种情况,我的正则表达式给出了粗体部分的匹配,尽管后来出现了不正确的部分(TEST)。如何修改正则表达式以丢弃整个字符串?

您的正则表达式必须保持匹配,直到字符串结束,因此您必须使用
$
指示行的结束:
^(?:[\w.]+,{1}(?:STR | INT | REAL){1},{1}(\s*|$)+$


您的正则表达式必须保持匹配,直到字符串结束,所以您必须使用
$
指示行结束:
^(?:[\w.]+,{1}(?:STR | INT | REAL){1},{1}(\s*|$)+$


您尝试的模式与
YoungGenMax,TEST
中的TEST不匹配,因为备选方案STR | INT | REAL不匹配

它将一直显示到重复中的最后一次成功匹配,即
Component、STR、YoungGenUse、STR、


您必须在组的重复之外的末尾添加锚点,以指示整个模式之后应该断言字符串的结尾

字符串中没有空格或点,因此您可以省略
\s*
,而使用
\w+
,在字符类中不带点。请注意,
\s
也可能与换行符匹配

^(?:\w+,(?:STR|INT|REAL),)+$

如果要继续匹配可选的空格字符和点:

^(?:[\w.]+,(?:STR|INT|REAL),\s*)+$


注意通过在组的末尾重复逗号,字符串应始终以逗号结尾。您可以从模式中省略
{1}
,因为它是多余的。

您尝试的模式与
YoungGenMax,TEST
中的测试不匹配,因为备选方案STR | INT | REAL不匹配

它将一直显示到重复中的最后一次成功匹配,即
Component、STR、YoungGenUse、STR、


您必须在组的重复之外的末尾添加锚点,以指示整个模式之后应该断言字符串的结尾

字符串中没有空格或点,因此您可以省略
\s*
,而使用
\w+
,在字符类中不带点。请注意,
\s
也可能与换行符匹配

^(?:\w+,(?:STR|INT|REAL),)+$

如果要继续匹配可选的空格字符和点:

^(?:[\w.]+,(?:STR|INT|REAL),\s*)+$


注意通过在组的末尾重复逗号,字符串应始终以逗号结尾。您可以从模式中省略
{1}
,因为它是多余的。

非常感谢,您的解释真的帮助了我!你能给我指出一些学习正则表达式的好资源吗?我很高兴我刚刚开始学习。不太擅长。@BhavyaBansal不客气!例如,您可以签出或堆栈溢出常见问题解答非常感谢,您的解释真的帮助了我!你能给我指出一些学习正则表达式的好资源吗?我很高兴我刚刚开始学习。不太擅长。@BhavyaBansal不客气!例如,您可以签出或堆栈溢出常见问题解答