0

我正在尝试用java编写一个匹配单词和连字符的正则表达式。到目前为止,我有:

Pattern p1 = Pattern.compile("\\w+(?:-\\w+)",Pattern.CASE_INSENSITIVE);
Pattern p2 = Pattern.compile("[a-zA-Z0-9]+",Pattern.CASE_INSENSITIVE);
Pattern p3 = Pattern.compile("(?<=\\s)[\\w]+-$",Pattern.CASE_INSENSITIVE | Pattern.DOTALL);

这是我的测试用例:

    程式
    Dsfasdf。程序 程序 Dsfasdf。Dsfasdf。哇哇哇!哇。哇?好的。
    他说:“嗨。” aasdfa. wsdfalsdjf. 去去去-
到
asdfasdf .. , : ; " ' ( ) ? ! - / \ @ # $ % & ^ ~ ` * [ ] { } + _ 123

任何帮助都是极好的

我的预期结果是匹配所有单词,即。

程序 Dsfasdf 程序 程序 Dsfasdf Dsfasdf
就像哇哇哇哇好的他说嗨aasdfa
wsdfalsdjf go-to go-to asdfasdf

我正在努力的部分是将在行之间拆分的单词匹配为一个单词。

IE。

去-
到
4

2 回答 2

3
\p{L}+(?:-\n?\p{L}+)*
\ /^\ /^\ /\ /^^^
 \ / | | | | \ / |||
  | | | | | | ||`- 前一个可以重复 0 次或多次(一组文字“-”、可选换行符和一个或多个任意字母(大写/小写))
  | | | | | | |`-- 结束第一个非捕获组
  | | | | | | `--- 匹配一个或多个前面的(任何字母,大写/小写)
  | | | | | `----- 匹配任何字母(大写/小写)
  | | | | `--------- 匹配单个换行符(可选,因为 `?`)
  | | | `------------ 字面量 '-'
  | | `------------- 启动第一个非捕获组
  | `---------------- 匹配一个或多个前面的(AZ之间的任何字母(大写/小写))
  `-------------------- 匹配任意字母(大写/小写)

这个可以吗?

于 2012-06-27T22:04:23.733 回答
1

我会用正则表达式:

\p{L}+(?:\-\p{L}+)*

这样的正则表达式还应该匹配单词“fianc锓À-la-carte”和其他包含一些特殊类别“字母”字符的单词。\p{L}匹配“字母”类别中的单个代码点。

于 2012-06-27T22:36:31.723 回答