我正在尝试根据用户输入构建一个javascript正则表达式:
function FindString(input) {
var reg = new RegExp('' + input + '');
// [snip] perform search
}
但是当用户输入包含一个?或*因为它们被解释为正则表达式特殊时,正则表达式将无法正常工作.实际上,如果用户将不平衡(或[字符串放入其中,则正则表达式甚至无效.
什么是正确转义所有特殊字符以在正则表达式中使用的javascript函数?
由于String.split()使用正则表达式,此片段:
String s = "str?str?argh";
s.split("r?");
Run Code Online (Sandbox Code Playgroud)
...收益率: [, s, t, , ?, s, t, , ?, a, , g, h]
什么是在r?序列上拆分此字符串以使其生成的最优雅的方法[st, st, argh]?
编辑:我知道我可以摆脱这个问题?.问题是我不知道分隔符,我不想通过编写escapeGenericRegex()函数来解决这个问题.
我需要一个java中的比较器,它与sql'like'运算符具有相同的语义.例如:
myComparator.like("digital","%ital%");
myComparator.like("digital","%gi?a%");
myComparator.like("digital","digi%");
Run Code Online (Sandbox Code Playgroud)
应评估为真,并且
myComparator.like("digital","%cam%");
myComparator.like("digital","tal%");
Run Code Online (Sandbox Code Playgroud)
应评估为假.任何想法如何实现这样的比较器或任何人都知道具有相同语义的实现?可以使用正则表达式完成吗?
我正在使用Matcher.appendReplacement()并且它工作得很好,直到我的替换字符串中有2美元:
请注意,替换字符串中的反斜杠(\)和美元符号($)可能会导致结果与将其视为文字替换字符串时的结果不同.如上所述,美元符号可被视为对捕获的子序列的引用,反斜杠用于替换替换字符串中的文字字符.
是否有一个方便的方法可以逃避所有反斜杠\和美元符号$反斜杠?或者我必须自己写一个?这听起来不是那么难,只要他们给你一个> :(
编辑:因为他们确实给你一个,我需要replace(">:(", ":-)");
在Java中,假设我有一个String变量S,我想在另一个String T中搜索它,如下所示:
if (T.matches(S)) ...
Run Code Online (Sandbox Code Playgroud)
(注意:上面的行是T.contains(),直到有几篇文章指出该方法不使用正则表达式.我的不好.)
但现在假设S可能有令人讨厌的角色.例如,设S ="[hi".左方括号将导致正则表达式失败.是否有一个函数我可以调用来逃避S,这样就不会发生这种情况?在这种特殊情况下,我希望将其转换为"\ [hi".
我有一个java.lang.String可能包含任何可能的字符,是否有一种简单的方法来清理字符串(例如,有一个额外的类可以做到这一点?)并删除所有"危险"字符以便以后java.util.regex.Matcher或正则表达式处理(例如$,^ ,...)?
是否有一个库或任何简单的方法来转换字符串,并确保它兼容作为正则表达式来寻找和替换另一个字符串.因此,如果字符串是"$ money",它将转换为"\ $ money".我尝试使用StringEscapeUtil.escape,但它不能用于$等字符.
我试图在另一个字符串中替换第一次出现的字符串"[]":
aString.replaceFirst("[]","blah");
我收到错误:java.util.regex.PatternSyntaxException:索引1 []附近的未闭合字符类
[和]显然是元字符,但是当我试图用\ eclipse来逃避它们时,抱怨它不是一个有效的转义序列.
我看了但找不到,我错过了什么?
谢谢
我有一个包含令牌的字符串列表.
令牌是:
{ARG:TOKEN_NAME}.
我还有令牌的哈希映射,其中key是令牌,value是我想用令牌代替的值.
当我使用"replaceAll"方法时,我收到错误:
java.util.regex.PatternSyntaxException:非法重复
我的代码是这样的:
myStr.replaceAll(valueFromHashMap , "X");
Run Code Online (Sandbox Code Playgroud)
和valueFromHashMap包含{和}.
我把这个hashmap作为参数.
我有一个简单的方法来搜索和编译给定字符串的模式
String search = I GIVE IT SOME STRING;
String trimmedSearch = search.trim();
if (trimmedSearch.isEmpty())
{
pattern_ = null;
}
else if (trimmedSearch.contains("*") || trimmedSearch.contains("(")
|| trimmedSearch.contains(")") || trimmedSearch.contains("?")
|| trimmedSearch.contains(".") || trimmedSearch.contains("[")
|| trimmedSearch.contains("]") || trimmedSearch.contains("{")
|| trimmedSearch.contains("}") || trimmedSearch.contains("^")
|| trimmedSearch.contains("|") || trimmedSearch.contains("$")
|| trimmedSearch.contains("+") || trimmedSearch.contains("\\"))
{
pattern_ = null;
}
else
{
pattern_ = Pattern.compile(trimmedSearch.toUpperCase(), Pattern.CASE_INSENSITIVE);
}
Run Code Online (Sandbox Code Playgroud)
无论何时搜索,模式都会崩溃 *
因为我有一个可怕的巨大的if语句检查,以确保该字符串不包含任何可以崩溃它的字符.但是,如果我想将它们包含在搜索中,该怎么办?有什么办法吗?
任何帮助将不胜感激,很难在网上任何地方搜索这类问题或问题,我开始失去理智.
java ×9
regex ×9
string ×4
escaping ×3
javascript ×1
replace ×1
replaceall ×1
sql ×1
wildcard ×1