我有这个正则表达式验证表达式(感谢ClasG和Marvel308):
在包含-?\d
的每一行的开头,我想允许(但不要求)单词“\ left(”。并且在每行的末尾包含{{1}我想允许(但不要求)单词“\ right”“如何编辑此验证表达式以满足此要求?
答案 0 :(得分:1)
答案 1 :(得分:1)
这是一个处理所有案例的正则表达式:
(?:(?:\$\$?|\\[$[(]?)\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*\\\))$
它使用子程序 - matrix
- 来缩短它。
以下是解释:
它的 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*\$
检查(一)美元符号,可选空格,然后是实际矩阵(通过调用子程序),然后是匹配的终止线,即单个美元符号。