Regex 如何创建正则表达式验证表达式以允许此字符串?
我有这个正则表达式验证表达式(感谢ClasG和Marvel308): 在包含Regex 如何创建正则表达式验证表达式以允许此字符串?,regex,validation,matrix,latex,expression,Regex,Validation,Matrix,Latex,Expression,我有这个正则表达式验证表达式(感谢ClasG和Marvel308): 在包含-?\d的每一行的开头,我想允许(但不要求)单词“\left”(“。在包含-?\d的每一行的末尾,我想允许(但不要求)单词“\right)”如何编辑此验证表达式以满足此要求 您可以使用正则表达式 \$\$\n\\begin{\w+}\n(\d+ & \d+ & \d+ \\\\\n){3}\\end{\w+}\n\$\$ 请参见这里有一个处理所有案例的正则表达式: (?:(?:\$\$?|\\[$[
-?\d
的每一行的开头,我想允许(但不要求)单词“\left”(“。在包含-?\d
的每一行的末尾,我想允许(但不要求)单词“\right)”如何编辑此验证表达式以满足此要求 您可以使用正则表达式
\$\$\n\\begin{\w+}\n(\d+ & \d+ & \d+ \\\\\n){3}\\end{\w+}\n\$\$
请参见这里有一个处理所有案例的正则表达式:
(?:(?:\$\$?|\\[$[(]?)\s*|^)\\begin{(\w+)}\s*(?:-?\d+\s*(?:&\s*|\\\\\n))+\\end{\1}\s*(?:\$\$?|\\[]$)]?)?$
编辑
这里有一个只允许匹配开始/结束*标记的解决方案:
^((?P<matrix>\\begin{(?<token>\w+)}\s*(?:-?\d+\s*(?:&\s*|\\\\\n))+\\end{\g<token>})|\$\s*(?P>matrix)\s*\$|\$\$\s*(?P>matrix)\s*\$\$|\\\[\s*(?P>matrix)\s*\\\]|\\\(\s*(?P>matrix)\s*\\\))$
这是由零件完成的
\\begin{(\w+)}\s*(?:-?\d+\s*(?:&\s*|\\\\\n))+\\end{\1}
它与文本匹配,后面是反斜杠,后面是文本begin
。然后它匹配花括号内矩阵的名称,将其捕获到第一组中。此后,它匹配任意数量的正数或负数(-?\d+
),后跟一个和(&)或两个反斜杠和一个换行符()。这些行可以重复任意次数。最后,它匹配结束的反斜杠和花括号内的名称(捕捉到组1)\\end{\1}
第一个版本允许(非强制性)在这之前和之后加上由$
、$$
、\(
和\[
)组成的行。但是,不检查信封行是否相互匹配
第二个版本首先使用上面解释的gut正则表达式测试裸矩阵,并将正则表达式存储为名为“matrix”(?P
。前一个gut正则表达式的区别在于正则表达式的名称存储在名为的捕获组-标记中。因此,矩阵末尾的文本使用\\end{\g}完成)
检查花括号内的文字字符串是否与捕获到名为标记的组中的部分匹配
裸正则表达式的测试之后,使用正确的字符组合和子例程矩阵
在允许的周围行之间进行交替。例如,交替
\$\s*(?P>matrix)\s*\$
检查一(1)个美元符号,可选空白,然后是实际矩阵(通过调用子例程),然后是匹配的终止行,即一个美元符号。对于原始问题,第一次更新和第四次更新,可以使用1个正则表达式。但是对于第二次和第三次更新,它们必须是单独的正则表达式。我将更新我的答案^(\${0,2})\n\\begin{\w+}\n((-?\d*&)+-?\d*\n)+\\end{\w+}\n\1$也可以处理更新1检查否我在regex101中使用了多行。对于其他更新,您需要单独的regex进行检查。单个regex无法实现。只需更改开始和结束位置的内容,并通过一个oryes连接,因为不同的开始和结束标记,它们无法处理许多CA失败之类的情况es,看看@marvel308,同意了,但是让一个正则表达式检查所有错误条目将使其无法管理。这在代码IMO中处理得更好。是的,或者使用多个正则表达式进行检查,都不能通过一个正则表达式来实现。好的,多个正则表达式可以“始终”通过交替连接到一个中,这样就可以在一个中完成。@ClasG这太完美了!我是否能够轻松地允许用户在输入数字的地方使用特定的单词(例如:“\left”)?因此我允许在出现-?\d的地方使用特定的单词和数字。
\$\s*(?P>matrix)\s*\$