我有下面的测试用例
hello how are you // 1. Allow
hello how are you // 2. Not Allow
hello < // 3. Not Allow
适用以下规则:
< >
我正在尝试以下方法:
^([^<> ]+ )+[^<> ]+$|^[^<> ]+$
这是可行的,但是在开始或结束时留出空格是不允许的。
答案 0 :(得分:0)
我假设您使用正则表达式在整个中查找匹配项 文本字符串(所有3行在一起)。
我还看到,您的两个选择都包含开始^
和结束$
,
因此您想将匹配项限制为单行
并可能使用m
正则表达式选项。
请注意,[^...]+
表达式与以下字符匹配:其他
放在括号之间,但不排除 \n
个字符,
可能不是您想要的。
因此,也许您应该在每个\n
表达式中添加[^...]+
。
正则表达式扩展为:
^([^<> \n]+ )+[^<> \n]+$|^[^<> \n]+$
它与第1行和第2行匹配。
但是请注意,第一个替代项(^([^<> \n]+ )+[^<> \n]+$
)
也可以做。
您确实希望第2行不匹配,请说明原因。
要在每行的开头/结尾保留任意数量的空格,
在初始*
之后和最终^
之前添加$
,以便
正则表达式(仅第一个替代项)变为:
^ *([^<> \n]+ )+[^<> \n]+ *$
但它仍然与第2行匹配。
或者测试字符串中的点实际上是空格,但是您写了 使用点的字符串,以显示空格数? 您应该在问题中提到它。
还有另一种可能性,允许点代替空格:
^[ .]*((?:[^<> .\n]+[ .])+[^<> .\n]+|[^<> .\n]+)[ .]*$
详细信息:
^[ .]*
-一行的开头+一系列空格或点,可能为空。(
-捕获组的开始-两个容器的容器
剥离的内容。
(?:[^<> .\n]+[ .])+
-备选方案1:一系列“允许的”字符(“单词”)+
一个空格或一个点(在下一个“单词”之前,重复几次)。
该组不必是一个捕获组,因此我放了?:
。[^<> .\n]+
-一系列“允许的”字符-最后一个“单词”。|
-或。
[^<> .\n]+
-备选方案2:单个“单词”。)
-捕获组的结尾。[ .]*$
-空格/点的最后(可能为空)序列+
行尾。当然,可以选择m
。