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。そのまま wow woah! うわー。うわー?わかった。
    彼は「こんにちは」と言った。aasdfa。wsdfalsdjf。ゴーゴーゴー
に
asdfasdf .. : ; " ' ( ) ?! - / \ @ # $ % & ^ ~ ` * [ ] { } + _ 123

どんな助けでも素晴らしいでしょう

私の期待される結果は、すべての単語に一致することです。

プログラム Dsfasdf プログラム プログラム Dsfasdf Dsfasdf
そのままですwow woah woah woah OK、彼はこんにちはaasdfaと言った
wsdfalsdjf go-to go-to asdfasdf

私が苦労している部分は、行間で分割されている単語を1つの単語として一致させることです.

すなわち。

行く-
に
4

2 に答える 2

3
\p{L}+(?:-\n?\p{L}+)*
\ /^\ /^\ /\ /^^^^
 \ / | | | | | | | \ / |||
  | | | | | | | | | | | | ||`- 前は 0 回以上繰り返すことができます (リテラル '-'、オプションの改行、および 1 つ以上の任意の文字 (大文字/小文字) のグループ)
  | | | | | | | | | | | | |`-- 最初の非キャプチャ グループを終了します
  | | | | | | | | | | | | `--- 前の 1 つ以上に一致 (任意の文字、大文字/小文字)
  | | | | | | | | | | `------ 任意の文字に一致 (大文字/小文字)
  | | | | | | | | ---------- 単一の改行に一致 (`?` のためオプション)
  | | | | | | `------------ リテラル '-'
  | | | | -------------- 最初の非キャプチャ グループを開始します
  | | `---------------- 前の 1 つ以上に一致 (A ~ Z (大文字/小文字) 間の任意の文字)
  ` ---------------------------------- 任意の文字に一致 (大文字/小文字)

これでよろしいですか?

于 2012-06-27T22:04:23.733 に答える
1

私は正規表現で行きます:

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

このような正規表現は、単語"fiancé""À-la-carte"、およびいくつかの特別なカテゴリ "letter" 文字を含む単語にも一致する必要があります。\p{L}カテゴリ「文字」の単一のコード ポイントに一致します。

于 2012-06-27T22:36:31.723 に答える