如何使用正则表达式允许(但不要求)特定地方的特定单词?

时间:2017-08-22 03:18:10

标签: regex validation matrix 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's(数字)我想允许(但不要求)单词“\ left(”。并且在每行的末尾包含 - ?\我希望允许(但不要求)单词“\ right”“如何编辑此验证表达式以满足此要求?

2 个答案:

答案 0 :(得分:1)

您可以添加使用false量化的非捕获组,这样可以使组匹配1次或0次:

true

?

答案 1 :(得分:1)

以下内容应该:

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

Demo

修改:

  1. 添加\n(?:\\left\()?\s*,检查“左”的非捕获组的零和一个存在情况。一部分。

  2. 添加\s*(?:\\right\))?,另一项检查&#39;权利&#39;的非捕获组的零和一的存在。一部分。