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

时间:2017-08-21 05:23:38

标签: regex validation matrix latex expression

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

^((?P\begin{(?\w+)}\s*(?:-?\d+\s*(?:&\s*|\\\n))+\end{\g})|\$\s*(?P>matrix)\s*\$|\$\$\s*(?P>matrix)\s*\$\$|\[\s*(?P>matrix)\s*\]|\(\s*(?P>matrix)\s*\))$

在包含-?\d的每一行的开头,我想允许(但不要求)单词“\ left(”。并且在每行的末尾包含{{1}我想允许(但不要求)单词“\ right”“如何编辑此验证表达式以满足此要求?

2 个答案:

答案 0 :(得分:1)

你可以使用正则表达式

\$\$\n\\begin{\w+}\n(\d+ & \d+ & \d+ \\\\\n){3}\\end{\w+}\n\$\$

请参阅regex demo

答案 1 :(得分:1)

这是一个处理所有案例的正则表达式:

 (?:(?:\$\$?|\\[$[(]?)\s*|^)\\begin{(\w+)}\s*(?:-?\d+\s*(?:&\s*|\\\\\n))+\\end{\1}\s*(?:\$\$?|\\[]$)]?)?$

See it here at regex101

修改

这是一个只允许匹配开/关*标签的解决方案:

^((?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*\\\))$

它使用子程序 - matrix - 来缩短它。

Here at regex101

以下是解释:

它的 gut 是识别矩阵的部分:

\begin{name}
1 & 2 & 3 \\
1 & -2 & 4 \\
1 & 2 & 5 \\
\end{name}

这是由部分

完成的
\\begin{(\w+)}\s*(?:-?\d+\s*(?:&\s*|\\\\\n))+\\end{\1}

匹配反斜杠后跟文字文本begin。然后它匹配大括号内的矩阵的名称,将其捕获到组1中。此后,它匹配任意数量的正数或负数(-?\d+),后跟&符号(&amp;)或两个反斜杠和换行符(\\\\\n)。这些行可能会重复任意次。最后,它匹配结束反斜杠和大括号\\end{\1}内的名称(捕获到组1)。

第一个版本允许(非强制性地)此前后加上由$$$\(\[组成的行。但是,不会检查包络行是否相互匹配。

第二个版本首先使用上面解释的 gite 正则表达式测试矩阵,并将存储正则表达式作为子例程命名为“矩阵” - (?P<matrix>。之前的 gut 正则表达式之间的区别在于,正则表达式的名称存储在名为的捕获组 - token中。因此,矩阵结尾的文本是通过\\end{\g<token>})检查大括号内的文字字符串与捕获到名为token的组中的部分匹配来完成的。

然后对裸露的正则表达式进行测试,然后进行交替,使得允许的周围线条具有正确的字符组合,并使用它们之间的子程序matrix。例如。交替

\$\s*(?P>matrix)\s*\$

检查(一)美元符号,可选空格,然后是实际矩阵(通过调用子程序),然后是匹配的终止线,即单个美元符号。