Regex 如何创建正则表达式验证表达式以允许此字符串?

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\$\$ 请参见这里有一个处理所有案例的正则表达式: (?:(?:\$\$?|\\[$[

我有这个正则表达式验证表达式(感谢ClasG和Marvel308):

在包含
-?\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*\$