我正在尝试编写一个将在字符串中查找特定单词的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
知道如何对字符串中的任何单词进行匹配吗?
提前致谢,
克雷格
答案 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.*"