正则表达式不匹配字符串的第一个和最后一个单词

时间:2016-04-21 19:20:16

标签: java regex

我正在尝试编写一个将在字符串中查找特定单词的java程序。我大部分时间都在工作,但如果要匹配的单词是字符串中的第一个或最后一个单词,它似乎不匹配。这是一个例子:

"trying to find the first word".matches(".*[^a-z]find[^a-z].*") //returns true
"trying to find the first word".matches(".*[^a-z]trying[^a-z].*") //returns false
"trying to find the first word".matches(".*[^a-z]word[^a-z].*") //returns false

知道如何对字符串中的任何单词进行匹配吗?

提前致谢,

克雷格

5 个答案:

答案 0 :(得分:0)

问题是你在$results = $mysqli->query("SELECT * FROM my_table ORDER BY data DESC, ID DESC");之前和之后的角色类 - 我认为你真正想要的是一个单词边界字符[^a-z](根据ColinD的评论)而不是不是az范围内的字符。正如评论中所指出的(感谢),您还需要处理字符串案例的开始和结束。

所以试试,例如:

\b

答案 1 :(得分:0)

你可以使用可选的(?),检查下面的链接并测试更多的情况,如果这给出了正确的输出: https://regex101.com/r/oP5zB8/1

 (.*[^a-z]?trying[^a-z]?.*)

答案 2 :(得分:0)

I think (^|^.*[^a-z])trying([^a-z].*$|$) just fits your need.

Or (?:^|^.*[^a-z])trying(?:[^a-z].*$|$) for non capturing parentheses.

答案 3 :(得分:0)

您可以尝试按照程序检查任何字符串的开头和结尾是否存在:

package com.ajsodhi.utilities;

import java.util.regex.Pattern;

public class RegExStartEndWordCheck {

    public static final String stringToMatch = "StartingsomeWordsEndWord";

    public static void main(String[] args) {

        String regEx = "Starting[A-Za-z0-9]{0,}EndWord";
        Pattern patternOriginalSign = Pattern.compile(regEx, Pattern.CASE_INSENSITIVE);
        boolean OriginalStringMatchesPattern = patternOriginalSign.matcher(stringToMatch).matches();
        System.out.println(OriginalStringMatchesPattern);
    }
}

答案 4 :(得分:0)

你应该使用边界\ b指定一个单词的开头或结尾而不是[^ a-z],这不是那么逻辑。 就像

一样
".*\\bfind\\b.*"