要匹配A到Z,我们将使用正则表达式:
[A-ZA-Z]
如何让正则表达式匹配用户输入的utf8字符?例如中文单词,如环保部
我正在使用Java处理一些Java源代码.我正在提取字符串文字并将它们提供给一个带字符串的函数.问题是我需要将未转义的String版本传递给函数(即这意味着转换\n为换行符,转换为\\单行\等).
Java API中是否有一个函数可以执行此操作?如果没有,我可以从某个库获得这样的功能吗?显然,Java编译器必须进行此转换.
如果有人想知道,我试图在反编译的混淆Java文件中取消混淆字符串文字.
StackOverflow上有许多问题和答案,假设"字母"可以在正则表达式中匹配[a-zA-Z].然而,对于Unicode,还有更多的字符,大多数人会认为是一个字母(所有希腊字母,Cyrllic ..还有更多.Unicode定义了许多块,每个块可能有"字母".
Java定义 为像alpha字符这样的东西定义了Posix类,但是它被指定为仅使用US-ASCII.预定义的字符类定义要包含的单词[a-zA-Z_0-9],这也排除了许多字母.
那么如何正确匹配Unicode字符串呢?是否有其他图书馆可以做到这一点?
如果我有一个句子并希望在特定单词之前匹配之后显示一个单词或所有单词,例如我想显示单词fox后面brown The quick brown fox jumps over the lazy dog,我知道我可以看起来正面看后面(?<=brown\s)(\w+)但是我不喜欢我完全理解在实例中使用\ b (?<=\bbrown\s)(\w+).我使用http://gskinner.com/RegExr/作为我的测试人员.
当字符串以数字开头,然后是一个点,然后是一个空格和一个或多个大写字符时,我需要匹配.匹配必须出现在字符串的开头.我有以下字符串.
1. PTYU fmmflksfkslfsm
Run Code Online (Sandbox Code Playgroud)
我试过的正则表达式是:
^\d+[.]\s{1}[A-Z]+
Run Code Online (Sandbox Code Playgroud)
它不匹配.对于这个问题,正则表达式是什么?
如果我在字符串中寻找特定的单词,例如,在字符串"你好吗"我正在寻找"是".常规indexOf()工作得更快更好还是正则表达式匹配()
String testStr = "how are you";
String lookUp = "are";
//METHOD1
if (testStr.indexOf(lookUp) != -1)
{
System.out.println("Found!");
}
//OR
//METHOD 2
if (testStr.match(".*"+lookUp+".*"))
{
System.out.println("Found!");
}
Run Code Online (Sandbox Code Playgroud)
上面两种方法中的哪一种是在另一个字符串中查找字符串的更好方法?还是有更好的选择?
从逻辑上讲,它是(但无论何时角色编码或区域设置正在运行,逻辑都无关紧要).根据
perl -e 'print "\n" =~ /\v/ ? "y\n" : "n\n";'
Run Code Online (Sandbox Code Playgroud)
打印"y",它是.根据
Pattern.compile("\\v").matcher("\n").matches();
Run Code Online (Sandbox Code Playgroud)
false在java中返回,它不是.如果没有这个帖子声称,这根本不会让我感到困惑
Sun为JDK7更新的Pattern类有一个奇妙的新标志UNICODE_CHARACTER_CLASS,它使一切正常工作.
但我使用的是java版本"1.7.0_07"并且该标志存在并且似乎根本没有任何改变.此外,"\n"是不是初来乍到的Unicode而是一个普通的老ASCII字符,所以我实在看不出这种差异可能是如何发生的.可能我做的事情很愚蠢,但我看不到.
我需要一些帮助才能完成关于正则表达式的想法.
关于SE上正则表达式的更好语法有一个问题,但我认为我不会使用流畅的语法.这对新手来说肯定不错,但是如果是复杂的正则表达式,你会用一整页稍微好一点的胡言乱语来代替一行乱码.我喜欢Martin Fowler的方法,其中正则表达式由较小的部分组成.他的解决方案是可读的,但手工制作; 他提出了一种聪明的方法来构建复杂的正则表达式而不是支持它的类.
我正试图用类似的东西来上课(首先看他的例子)
final MyPattern pattern = MyPattern.builder()
.caseInsensitive()
.define("numberOfPoints", "\\d+")
.define("numberOfNights", "\\d+")
.define("hotelName", ".*")
.define(' ', "\\s+")
.build("score `numberOfPoints` for `numberOfNights` nights? at `hotelName`");
MyMatcher m = pattern.matcher("Score 400 FOR 2 nights at Minas Tirith Airport");
System.out.println(m.group("numberOfPoints")); // prints 400
Run Code Online (Sandbox Code Playgroud)
其中fluent语法用于组合扩展的regex,如下所示:
`name` 创建一个命名组
`:name` 创建一个非捕获组
(?:......)`-name` 创建一个反向引用
~ @#%")"
+或(将是非常混乱,所以这是不允许的define('#', …我想匹配包含某个单词的所有字符串.喜欢:
String regex = (?:\P{L}|\W|^)(???)(?:\b|$)
Run Code Online (Sandbox Code Playgroud)
但是,Pattern类不会编译它:
java.util.regex.PatternSyntaxException: Unmatched closing ')' near index 39
(?:\P{L}|\W|^)((?:??|??|??)(?:?)|?)|?)?)(?:\b|$)
Run Code Online (Sandbox Code Playgroud)
我已经设置了unicode_case来编译param,不知道这里出了什么问题
final Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE| Pattern.CANON_EQ);
Run Code Online (Sandbox Code Playgroud)
感谢帮助!:)
我想使用正则表达式来验证名称。名称必须包含名字、中间名、姓氏(不一定全部)。但我还想强加一个条件,即名称必须至少包含四个字符。我发现 regex 在这里验证全名Java Regex to Validate Full Name ...并找到了 regex 来检查字符串中至少三个字符(字母)的检查 在这里Regex 检查至少 3 个字符。但我不确定如何将这两者结合起来以获得所需的结果。请帮助我实现所需的正则表达式,以便我可以完成我的项目。
regex ×9
java ×8
unicode ×4
string ×2
cjk ×1
escaping ×1
fluent ×1
google-forms ×1
perl ×1
validation ×1