我是正则表达式的新手,并且给出了以下正则表达式:
(\p{L}|\p{N}|_|-|\.)*
Run Code Online (Sandbox Code Playgroud)
我知道*的意思和| 意思是"或"而那个\逃脱.
但我不知道是什么\p{L}和\p{N}意味着什么.我搜索了Google,没有结果......
有人能帮我吗?
为什么我不能匹配字符串
"1234567-1234567890"
Run Code Online (Sandbox Code Playgroud)
使用给定的正则表达式
\d{7}-\d{10}
Run Code Online (Sandbox Code Playgroud)
与egrep从这样的外壳:
egrep \d{7}-\d{10} file
Run Code Online (Sandbox Code Playgroud)
?
假设我想匹配"单词"字符(\w),但排除"_",或匹配空白字符(\s),但排除"\ t".我怎样才能做到这一点?
如何替换不符合条件的字符串中的所有字符.我在使用NOT运算符时遇到了麻烦.
具体来说,我试图删除所有不是数字的字符,到目前为止我已经尝试过了:
String number = "703-463-9281";
String number2 = number.replaceAll("[0-9]!", ""); // produces: "703-463-9281" (no change)
String number3 = number.replaceAll("[0-9]", ""); // produces: "--"
String number4 = number.replaceAll("![0-9]", ""); // produces: "703-463-9281" (no change)
String number6 = number.replaceAll("^[0-9]", ""); // produces: "03-463-9281"
Run Code Online (Sandbox Code Playgroud) StackOverflow上有许多问题和答案,假设"字母"可以在正则表达式中匹配[a-zA-Z].然而,对于Unicode,还有更多的字符,大多数人会认为是一个字母(所有希腊字母,Cyrllic ..还有更多.Unicode定义了许多块,每个块可能有"字母".
Java定义 为像alpha字符这样的东西定义了Posix类,但是它被指定为仅使用US-ASCII.预定义的字符类定义要包含的单词[a-zA-Z_0-9],这也排除了许多字母.
那么如何正确匹配Unicode字符串呢?是否有其他图书馆可以做到这一点?
是否有一种简单的方法来匹配类中除了某些特定组之外的所有字符?例如,如果在我可以使用\ w来匹配所有unicode单词字符集的语言中,有没有办法从该匹配中排除像下划线"_"这样的字符?
只有想到的想法是在每个角色周围使用负向前瞻/后面,但是当我有效地想要将角色与正匹配和负匹配匹配时,这似乎比必要更复杂.例如,如果&是一个AND运算符,我可以这样做......
^(\w&[^_])+$
Run Code Online (Sandbox Code Playgroud) 在Perl的正则表达式,如表达式\1,\2等通常解释为"反向引用"到先前捕获的组,但不因此当\1,\2等字符类内出现.在后一种情况下,它\被视为转义字符(因此\1只是1等).
因此,如果(例如)想要匹配一个字符串(长度大于1),其第一个字符与其最后一个字符匹配,但不出现在字符串中的任何其他位置,则以下正则表达式不会:
/\A # match beginning of string;
(.) # match and capture first character (referred to subsequently by \1);
[^\1]* # (WRONG) match zero or more characters different from character in \1;
\1 # match \1;
\z # match the end of the string;
/sx # s: let . match newline; x: ignore whitespace, allow comments
Run Code Online (Sandbox Code Playgroud)
将不工作,因为它匹配(例如)字符串'a1a2a':
DB<1> ( …Run Code Online (Sandbox Code Playgroud) Java使用哪个正则表达式引擎?
在像RegexBuddy这样的工具中使用
[a-z&&[^bc]]
Run Code Online (Sandbox Code Playgroud)
Java中的表达式很好,但在RegexBuddy中它还没有被理解.
事实上,它报道:
匹配下面列表中的单个字符
[a-z&&[^bc]
- 范围在
a和之间的字符z:a-z- 其中一个人物
&[^bc:&&[^bc]字面匹配字符:]
但我想匹配一个字符,a并z与一个不是b或的字符相交c
似乎使用一个字符类比一个例子中的交替更快,比如:
[abc]vs (a|b|c)
我听说它被推荐,并且使用Time::HiRes我验证的简单测试(慢10倍).在捕获括号产生差异的情况下
也使用(?:a|b|c)不会改变结果.
但我不明白为什么.我认为这是因为回溯,但我在每个位置看到它的方式有3个字符比较所以我不确定回溯是如何影响交替的.这是实施交替性质的结果吗?
什么字符类或Unicode属性将匹配Perl 中的任何Unicode元音?
错误答案:[aeiouAEIOU].(这里的讲道,洗衣清单中的第24项)
perluniprops仅为Hangul和印度语脚本提及元音.
让我们抛开一个元音是什么的问题.是的,i在某些情况下可能不是元音.所以,任何可以作为元音的角色都可以.
character-class ×10
regex ×9
perl ×4
java ×3
grep ×1
performance ×1
regexbuddy ×1
unicode ×1
xml ×1