java中单空格和/或撇号的正则表达式

时间:2017-11-23 15:32:21

标签: java regex

我的正则表达式有问题。有人可以帮我这个吗?要求:字符串应该是字母的,可以包含单个撇号和/或单个空格(大小应至少为2)

Valid strings:
1. 'abc
2.' abc
3.abc '
4.abc' 
5.a 'bc
6.a' bc

我使用了以下正则表达式。它适用于方案2,4,6,但不适用于方案1,3,5

Regex:
     "(([a-zA-Z][a-zA-Z])| " +
    "([a-zA-Z]*\\s\\'[a-zA-Z]*)|" +
    "([a-zA-Z]*\\'\\s[a-zA-Z]*)|"+
    "[a-zA-Z]*|" +
    "[a-zA-Z]\\s|" +
    "[a-zA-Z]\\'|" + 
    "\\s[a-zA-Z]|" + 
    "\\'[a-zA-Z]|"+
    "\\s[a-zA-Z]*|"+
    "\\'[a-zA-Z]*|" +
    "[a-zA-Z]*\\s|"+
     "[a-zA-Z]*\\')"

2 个答案:

答案 0 :(得分:1)

代码

注意:由于输入为多行,因此链接在正则表达式中包含\r\n

See regex in use here

^(?!(?:[^']*'){2})(?!(?:[^ ]* ){2})[a-z ']{2,}$

结果

输入

 'abc
' abc
abc '
abc' 
a 'bc
a' bc
abc
' 
ab

a
a'' bc
a  bc

输出

以下只是符合要求的字符串 注意:倒数第二个字符串示例是' (撇号和空格),根据OP的要求,它应匹配。

 'abc
' abc
abc '
abc' 
a 'bc
a' bc
abc
' 
ab

说明

  • ^在行首处断言位置
  • (?!(?:[^']*'){2})确定以下内容的否定前瞻不包括2个撇号'
  • (?!(?:[^ ]* ){2})否定前瞻确保后续内容不包含2个空格
  • [a-z ']{2,}匹配集合中的两个或多个字符
  • $断言行尾的位置

答案 1 :(得分:-1)

根据提供的说明,您可以使用较小的内容来填充提供的电子邮件。

^( |'|[a-zA-Z]){2,}
  1. 第一个值 ^ 将检测它是否是起始元素而不是a 子。
  2. 然后我们将所有可能的括号括在括号中 值,所以,你可以有一个空格,你可以有一个撇号或你 可以有一个字母字符串。
  3. 最后,我们考虑的比 元素需要至少有2个字符,用{2,}完成 如果要限制最大长度,只需添加数字即可 在右边。例如{2,10}。