我有一个代码,使用一些逻辑生成一些单词,我有正则表达式1(见下文)。但是我需要生成正确的单词,例如单词1。我的逻辑包括我提到的数学模式。我需要正确的模式来生成单词,例如单词1而不是2。模式的逻辑是:
Aakemenkyu
Klepathass
Waknampite
Flaetobsak
Oladkinqyt
Mmalinnetj
等等
这些是单词 1
[A-Z](([aei ou y]|[bcd fg hj klm np qrs tv w x z]){1,2})*
这是正则表达式 1
这个正则表达式不起作用,我的代码逻辑生成了下一个单词:
Ijythlzuoe
Tervkpxyib
Ifuemkoeui
Mqjtobojex
Ephyrjiuau
这些是单词 2
例如,在单词Ijythlzuoe
中有thl
(辅音连续重复3次)和uoe
(元音重复)
请帮帮忙。
正则表达式,(?=[A-Z][A-Za-z])(? i)(?!.*[aeiouy]{3}|。*[^aeiouy]{3})[a-z]
应该满足您的要求。
regex101中正则表达式的解释:
演示:
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
Stream.of("Aakemenkyu",
"Klepathass",
"Waknampite",
"Flaetobsak",
"Oladkinqyt",
"Mmalinnetj",
"Ijythlzuoe",
"Tervkpxyib",
"Ifuemkoeui",
"Mqjtobojex",
"Ephyrjiuau").forEach( s -> {
System.out.println(s + " => " + s.matches("(?=[A-Z][A-Za-z])(?i)(?!.*[aeiouy]{3}|.*[^aeiouy]{3})[a-z]+"));
});
}
}
输出:
Aakemenkyu => true
Klepathass => true
Waknampite => true
Flaetobsak => true
Oladkinqyt => true
Mmalinnetj => true
Ijythlzuoe => false
Tervkpxyib => false
Ifuemkoeui => false
Mqjtobojex => false
Ephyrjiuau => false
您可以尝试:
^(?=[A-Z][a-z]*$)(?i)(?!.*[aeiouy]{3}|.*[^aeiouy\n]{3})[a-z]+$
查看在线演示
^
-开始字符串定位(?=[A-Z][A-Z]*$)
-正向前看以大写字母开始字符串,而余数以小写结尾(?i)
-匹配余数不区分大小写的内联修饰符(?!
-打开负前瞻:<ul>|
-或:)
-关闭负前瞻我认为“生成”实际上是想说“匹配”。
您可以使用此正则表达式来验证 1-2 个辅音,后跟 1-2 个元音,反之亦然:
/^(([aeiouy]){1,2})?(([bcdfghjklmnpqrstvwxz]){1,2}([aeiouy]){1,2})*(([bcdfghjklmnpqrstvwxz]){1,2})?$/i
使用JavaScript的测试用例,但此正则表达式可以使用任何语言:
const regex = /^(([aeiouy]){1,2})?(([bcdfghjklmnpqrstvwxz]){1,2}([aeiouy]){1,2})*(([bcdfghjklmnpqrstvwxz]){1,2})?$/i;
[
'Aakemenkyu',
'Klepathass',
'Waknampite',
'Flaetobsak',
'Oladkinqyt',
'Mmalinnetj',
'Ijythlzuoe',
'Tervkpxyib',
'Ifuemkoeui',
'Mqjtobojex',
'Ephyrjiuau'
].forEach(str => {
console.log(str + ' => ' + regex.test(str));
});
问题内容: 有没有办法使用正则表达式来匹配重复的字符集?例如: 我知道那是错的。但是有什么可以匹配这种效果的吗? 更新: 您可以使用嵌套捕获组吗?像什么? 问题答案: 将要重复的正则表达式放在括号中。例如,如果您要重复5次: 或者,如果您想要任意数量的重复(0或更多): 或一个或多个重复: 编辑 以回应更新 正则表达式中的括号有两个作用:它们将正则表达式中的一系列项目组合在一起,以便您可以将运算符
我正在尝试匹配这个片段中的“Б.Γ”。通常,首字母应该没有空格,所以我需要一个可以解释可选空格的正则表达式。 我一直在使用: 但是好像和这个不太对。我不确定为什么。注意,我在java中的“s”和“s”之前键入< code>\\。有人能发现错误吗?
问题内容: 我想匹配aaaa,aaaad,adjjjjk之类的内容。类似于([az])\ 1+的字符被用来匹配重复的字符,但是我无法用四个字母来解决这个问题。 问题答案: 不知道有限重复语法,您自己的问题解决能力应带您前往: 显然,它并不漂亮,但是: 有用 它锻炼您自己的问题解决能力 它可能会导致您对概念有更深入的了解 在这种情况下,了解有限重复语法的简化形式 我有一个担忧: 下两个我该怎么办?
如何在不包含连续子字符串baa的字母表{a,b,c}上表达正则表达式?
null 包含情况的示例为: 排除情况的示例为:
我正在尝试编写一个正则表达式,使其只有两个单词,它们之间只有一个空格。两个字都不能少于三个字符。例子:乔·史密斯