PHP猪拉丁语,Y作为元音和辅音

时间:2017-03-01 21:23:53

标签: php regex

我正在尝试使用PHP解决翻译为猪拉丁语的问题。我被卡住了,因为根据情境,Y既可以是元音也可以是辅音。如果Y在单词的开头,则被认为是辅音,如果它在中间被认为是元音。

例如“黄色风格”变成“ellowyay ylestay”。规则是:“以元音(A,E,I,O,U)开头的单词只需在单词的末尾附加”WAY“。 以辅音开头的单词将所有辅音字母直到第一个元音移到单词的末尾(而不是仅仅是第一个辅音字母),并附加“AY”。 (在这种情况下,'Y'被视为元音)“

我的代码如下:

const request = axios.get(`http://localhost:8081/api/forecast?latitude=${latitude}&longitude=${longitude}`);

如果输入“黄色样式”产生“yelloway ylestay”,这接近预期结果,但不完全。

关于如何解决这个问题的任何想法?

2 个答案:

答案 0 :(得分:1)

在我看来,你有三个独立的条件 此正则表达式使用具有这些条件的分支重置(并行组) 必须强制执行每个条件,这就是它的作用。

请注意,它不计入边界,但如果需要,我会使用空白边界。 (?<!\S)(?: regex )(?!\S)
另外,您可以在[a-z]班级或[b-df-hj-np-tv-xz]上添加其他字符 但不是元音类[aeiouy][y]类。

基本上是
查找(?i)(?|([aeiou][a-z]*)()|([b-df-hj-np-tv-xz]+)([aeiouy][a-z]*)|([y]+[b-df-hj-np-tv-xz]*)([aeiouy][a-z]*))
替换$2$1ay

扩展

 (?i)                              # Modifier - case independent
 (?|                               # Branch Reset
      ( [aeiou] [a-z]* )                # (1), Condition: starts with a vowel
      ( )                               # (2)
   |  
      ( [b-df-hj-np-tv-xz]+ )           # (1), Condition: starts with a non-Y consonant
      ( [aeiouy] [a-z]* )               # (2), and Y as vowel
   |  
      ( [y]+ [b-df-hj-np-tv-xz]* )      # (1), Condition: starts with a Y consonant
      ( [aeiouy] [a-z]* )               # (2), and Y as vowel
 )

示例输入yellow style atak yyerto yystay start
示例输出ellowyay ylestay atakay ertoyyay ayyystay artstay

答案 1 :(得分:0)

preg_replace中的正则表达式与第一个捕获组中的Y不匹配:([b-df-hj-np-tv-xz]*)。因此,这些群组最终为$1=''$2='yellow',因此结果为yelloway

我没有测试过,但这应该有效,不是吗?

preg_replace('/^([b-df-hj-np-tv-z]*)([aeiouy].*)$/', "$2$1ay", $input)