我正在尝试使用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”,这接近预期结果,但不完全。
关于如何解决这个问题的任何想法?
答案 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)