正则表达式优先匹配

时间:2014-08-23 14:09:37

标签: regex

我想创建一个正则表达式,我在其中匹配单词:

  1. 第一个字母
  2. 如果这个单词有两个以上的字母:第一个辅音或如果没有辅音,那么第一个元音
  3. 如果单词有多个字母:最后一个字母
  4. 我正在使用表达式:

    \s*([a-zA-Z])[eyuioaEYUIOA]*([qwrtpsdfghjklzxcvbnmQWRTPSDFGHJKLZXCVBNM]?)[a-zA-Z]*([a-zA-Z])[-\?\.,\s+]
    

    但是我不明白如何实现OR功能:在下面的文本中我失败了#34;现在","不是"正确。我的比赛是N_w,n_t,但他们应该是现在,而不是

    现在这不是结束。这甚至还没开始结尾。但它可能是开始的结束。

    我应该如何实现优先OR功能?

    示例:

    I am now this is the even beginning perhaps match keen vlk 

    所需的比赛

    I am now ths is the evn bgg prs mth ken vlk 

1 个答案:

答案 0 :(得分:0)

对于这个正则表达式,我认为你必须使用一个conditionnal语句,一种方法是:\s*([a-zA-Z])(?(?=\S*?[qwrtpsdfghjklzxcvbnmQWRTPSDFGHJKLZXCVBNM]\S)(?:\S*?)([qwrtpsdfghjklzxcvbnmQWRTPSDFGHJKLZXCVBNM])|([eyuioaEYUIOA]))?[a-zA-Z]*?([a-zA-Z])[-\?\.,\s+]在这个表达式中,第一个组是第一个字母,第二个是第一个字母,如果有的话是一个,它不是一个2字的字母,第三个是第一个元音,第四个是最后一个字母。第二个和第三个可以是空的。

您可以在http://regex101.com/r/yQ1aR3/2上查看。