正则表达式 - 匹配单个字符的字符串

时间:2016-01-07 14:55:11

标签: regex

我是正则表达式的新手。我正在寻找一个表达式,它将返回符合以下条件的结果:

  • 第一个字必须是3个字母或更多
  • 最后一个字必须是3个字符或更多
  • 如果第一个和最后一个单词之间的任何单词或单词只包含1个字母,则返回该短语
  • 第一个和最后一个字符之间的所有其他字词(除了单字母字样)必须是3个字母或更多

我希望它能返回如下的短语:

'因此 a 飓风将到达'和'然而知道像Michael Smith一样

每个单词之间应该有一个空格。

到目前为止,我有:

^([A-Za-z]{3,})*$( [A-Za-z])*$( [A-Za-z]{3,})*$

任何帮助将不胜感激。它与间距有关吗?我正在使用名为“Oracle EDQ”的应用程序。

2 个答案:

答案 0 :(得分:1)

在正常的正则表达式世界中,您使用\b,一个单词边界。

^[a-zA-Z]{3,}(\s+|\b([a-zA-Z]|[a-zA-Z]{3,})\b)*\s+[a-zA-Z]{3,}$
                  ^^                       ^^

请参阅demo

也许,非捕获组(如anubhava所示)。

从我看到的,Oracle EDQ正则表达式语法(以及非捕获组)中没有单词边界。你应该依赖\s模式,匹配空格。

因此,无论是

还是强制性的
^[a-zA-Z]{3,}(\s+|\s([a-zA-Z]|[a-zA-Z]{3,}))*\s+[a-zA-Z]{3,}$
                  ^^                                     

OR

^[a-zA-Z]{3,}(\s+|([a-zA-Z]|[a-zA-Z]{3,})\s)*\s*[a-zA-Z]{3,}$
                                         ^^    ^

答案 1 :(得分:0)

您可以使用此正则表达式:

^[a-zA-Z]{3,}(?:\s+|(?:[a-zA-Z]|[a-zA-Z]{3,}))*\s+[a-zA-Z]{3,}$

RegEx Demo