正则表达式和Java的问题:单词可能只包含字母和连字符( - ),必须以字母开头

时间:2016-11-01 15:39:39

标签: java regex regex-negation

我一直在努力研究这个问题,并且使用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.");
}

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:1)

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

假设您的意思是正常AZ,并假设您仍在使用Pattern.CASE_INSENSITIVE

以字母开头:^[a-z]
随后是任何字母和连字符序列:[a-z-]*
结合使用:^[a-z][a-z-]*$

如果您使用m.matches()代替m.find(),则更简单:

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

答案 1 :(得分:0)

//starting with one or more letters then can contain as many as you want with - included
[a-zA-Z]+[a-zA-Z-]*

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

var $animatedEls = $(".block-inner");

      $(window).scroll(function(e) {
        e.preventDefault();
        var scrollTop = $(window).scrollTop();
        var offset = 0;

        // Loop through each image (.block-inner)
        $.each($animatedEls, function(i, item) {

            // Get offset for each .inner-block
            offset = $(item).offset().top - scrollTop;

            console.log(i+') '+offset);

            // Apply to every second item
            if (i % 2) {
                $(item).css("transform","translateY(-" +  (offset/20)  + "px)");
            } else {
                $(item).css("transform","translateY(" +  (offset/20)  + "px)");
            }
        });

});