【问题标题】:Problems with Regex and Java: Words may contain only letters and hyphens (-) and must begin with a letterRegex 和 Java 的问题:单词可能只包含字母和连字符 (-),并且必须以字母开头
【发布时间】:2016-11-01 15:39:39
【问题描述】:

我多年来一直在尝试研究这个问题,并且使用 Java 和 Regex 真的很挣扎。我正在尝试创建一个符合这些条件的正则表达式:
单词只能包含字母和连字符 (-),并且必须以字母开头。没有数字。

我的 Java 代码如下所示:

String test="^[a-zA-Z][^\\\\0-9]*[\\-]*[a-zA-Z]*";
Pattern p = Pattern.compile(test,Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
Matcher m = p.matcher(textInputWord.getText());
if(m.find()){
    String temp = textInputWord.getText();
    wordArrayList.add(temp);
    labelMainText.setText("Word " + textInputWord.getText() + " was added to the ArrayList.");
}else{
    labelMainText.setText("The string " + textInputWord.getText() + " was not added to the list as it is not a valid word.");
}

任何帮助将不胜感激。

【问题讨论】:

  • ^[a-z][a-z-]*$ 如果您使用的是Pattern.CASE_INSENSITIVE

标签: java regex regex-negation


【解决方案1】:

“无数字”指令是多余的,因为它已经说过它只能包含字母和连字符。

假设您的字母是指普通的AZ,并假设您仍在使用Pattern.CASE_INSENSITIVE

以字母开头:^[a-z]
后跟任意字母和连字符序列:[a-z-]*
组合:^[a-z][a-z-]*$

如果你使用m.matches()而不是m.find(),那就更简单了:

[a-z][a-z-]*

【讨论】:

  • 不是Pattern.CASE_INSENSITIVE作为第二个参数,只需在正则表达式前面加上(?i),那么正则表达式是自包含的。或者,将正则表达式设为\p{Alpha}[\p{Alpha}-]*。然后你可以为 unicode 字母添加 (?U) 前缀,但如果你愿意,\p{L}[\p{L}-]* 会更容易。
【解决方案2】:
//starting with one or more letters then can contain as many as you want with - included
[a-zA-Z]+[a-zA-Z-]*

【讨论】:

  • 这个正则表达式不匹配整个单词(从头到尾)。
  • + 是不必要的。没有它也会匹配。
  • @Sunil B N 单词只能包含字母和连字符 (-),并且必须以字母开头。 但是,您的正则表达式匹配单词 1abc-def(不是整个单词当然)
【解决方案3】:

我认为这比你做的要容易得多:

String test = "[a-zA-Z][a-zA-Z\\-]*";

但这仅适用于 ASCII A-Z,不适用于带有重音符号和变音符号的单词。

【讨论】:

  • 如果字符类中的第一个或最后一个,则无需转义-。不过不疼。
【解决方案4】:
String test="[a-zA-Z][a-zA-Z\\-]*";
Pattern p = Pattern.compile(test);
Matcher m = p.matcher(textInputWord.getText());

if(m.find()){
    String temp = textInputWord.getText();
    wordArrayList.add(temp);
    labelMainText.setText("Word " + textInputWord.getText() + " was added to the ArrayList.");
}else{
    labelMainText.setText("The string " + textInputWord.getText() + " was not added to the list as it is not a valid word.");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    • 2018-06-09
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多