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不客气!例如,您可以签出或堆栈溢出常见问题解答