【问题标题】:Regex - matching world which contain only vowels or consonants正则表达式 - 匹配仅包含元音或辅音的世界
【发布时间】:2016-11-05 16:44:13
【问题描述】:

我对正则表达式有疑问。我只想匹配这些只包含元音或辅音的单词。

例如我有这样的字符串:

aeyiuo 
aeYYuo 
qrcbk 
aeeeee 
normal 
Text 
extTT 

我的正则表达式应该匹配:aeyiuo aeYYuo aeeeee

我不知道为什么我的表情不起作用^[aeyiuo]*|[^aeyiuo]*$ 要检查我的正则表达式,我使用在线解析器:http://www.regexr.com/ 或 http://regexpal.com/

如果有人能解释我的错误,我将不胜感激。

【问题讨论】:

  • ^ 匹配整个字符串的开头,而不是单词的开头。同样,$ 匹配字符串的结尾,而不是单词的结尾。如何可靠地匹配单词的结尾取决于您使用的正则表达式引擎。请说出您想使用哪种编程语言。
  • 你想从上面的字符串中得到什么样的输出??
  • 是的,请说明您使用的语言。

标签: regex


【解决方案1】:

如果你想匹配只有元音的行,那么你只需要考虑一个字符类[]。
我们应该添加什么?元音! [aeiouy].
我们需要它一次或多次,所以让我们添加一个加号[aeiouy]+。
我们还需要锚定它^[aeiouy]+$。
现在让我们谈谈修饰符,我们需要i 修饰符来匹配不区分大小写的内容。我们还需要m 修饰符,以便^ 和$ 将分别匹配行首和行尾。另外不要忘记g 修饰符,在某些引擎中,您需要它来匹配所有出现。

Online demo

【讨论】:

  • 感谢您的回答@HamZa,非常有帮助:)
【解决方案2】:

为了简化事情,为什么不检查两个不同的表达式呢?

^[aeyiuo]+$ 仅用于元音

^[^aeyiuo]+$ 仅用于辅音。

除非您的要求是只使用一个正则表达式。检查是否区分大小写或不区分大小写。

【讨论】:

  • 我必须在一个表达式中做到这一点 :( 不幸的是,您的 + 符号解决方案不起作用。
  • 这是错误的,看我对^和$的问题的评论。
  • plus 表示模式出现一次或多次。星表示它可能是零出现。所以 a[ ]*b 表示 a 和 b 由零个或多个空格分隔。如果你把 plus 这意味着至少应该有一个空格来匹配。如果你使用星号,你的空字符串也将匹配,但它不包含元音!
  • @ChristianAichinger 看到了您的评论。我假设每个字符串都应用了正则表达式,并且将有单独的正则表达式来检查元音和辅音。接受的答案假设相同。我发现使用更简单和更小的正则表达式更容易,并且使用代码来拆分字符串并在代码中而不是在正则表达式中执行 OR 操作。
  • 请注意,^[^aeyiuo]+$ 也将匹配 12345。在这种情况下,最好不要使用否定字符类。
【解决方案3】:

您的正则表达式现在检查它是否匹配 ^[aeyiuo]* 或 [^aeyiuo]*$(注意第一个表达式中没有 $ 而第二个表达式中没有 ^)。

你有两个选择:

  1. 在两个表达式两边加上括号:

    ^([aeyiuo]*|[^aeyiuo]*)$

  2. 在两个表达式中添加 ^ 和 $

    ^[aeyiuo]*$|^[^aeyiuo]*$

【讨论】:

    【解决方案4】:

    如果您只想要元音aeiyou,请尝试:\b[aeiyou]+\b。

    只有辅音(或任何其他非元音字符)是:\b[^\b\saeiyou]+\b

    所以你得到:\b[aeiyou]+\b|\b[^\b\saeiyou]+\b

    匹配:aeyiuo aeYYuo qrcbk aeeeee

    它将匹配 qrcbk 以及与您的示例相反。

    希望我没有误会……

    【讨论】:

    • 您好,欢迎来到 StackOverflow!我已对您的答案进行了格式化以使其更具可读性,但下次尝试探索和使用 StackOverflow 的格式化工具。
    • 另外,字符类\b 中的[\b] 将匹配退格(ASCII 8)。我不认为你是那个意思:)
    【解决方案5】:

    if([^aeiou]) //假,那么只有元音 if([^b-df-hj-np-tv-z]) //假,那么只有辅音

    【讨论】:

    • 欢迎来到 Stack Overflow!花点时间阅读帮助中心的editing help。 Stack Overflow 上的格式与其他网站不同。
    【解决方案6】:

    回答:^([^aeiouyAEIOUY0-9\W]+)$|^([aeiouyAEIOUY]+)$

    说明:从字符串开头^any non([^vowel, number, non-word-character\W)] 注意双重否定出现一次 或多个连续+ 到字符串末尾$ 或| 从 字符串开头^连续出现一次或多次的任何元音+ 到字符串末尾$

    如果有帮助的话 =D


    分解:

    元音分组:([aeiouyAEIOUY]+)
    辅音分组:([^aeiouyAEIOUY0-9\W]+)
    仅元音字符串:^([aeiouyAEIOUY]+)$
    仅辅音字符串:^([^aeiouyAEIOUY0-9\W]+)$

    同上,只是分组:
    仅元音或仅辅音字符串:(^([^aeiouyAEIOUY0-9\W]+)$|^([aeiouyAEIOUY]+))$)

    奖金:

    辅音包括y,如果后跟元音:(y(?=[aeiouAEIOU]))|([^aeiouAEIOU0-9\W])

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-11
      • 1970-01-01
      • 1970-01-01
      • 2012-02-26
      相关资源
      最近更新 更多