1

簡単な要件があります。Hibernate 検証エンジンを使用して、制約が true か false かを判断します。

すべての単語が大文字で始まる場合、True はテキストでなければなりません。いくつかの困難があります:

言葉は次のようにも始まります

8-テスト
あるいは
8テスト
あるいは
(テスト)
あるいは
-テスト
または同等のもの
また、通常はコンマで区切られています (または別の区切り文字):
テスト、テスト、テスト
String 内の単語が大文字で始まることを確認したいだけであることを思い出してください。私の試みを見ると、おそらく私は物事を複雑にしすぎています。

以下にいくつかのサンプルを示します: すべて一致すると予想される (true):

- ヒドロキシイソヘキシル 3-シクロヘキセン カルボキシアルデヒド、ベンジル
- テスト、テスト、テスト
- CI 15510、メチルクロロイソチアゾリノン、EDTA二ナトリウム
- なし
- なし
すべて一致しないと予想される (false):
- ヒドロキシイソヘキシル 3-シクロヘキセン カルボキシアルデヒド、ベンジル
- テスト、テスト、テスト
- CI 15510、メチルクロロイソチアゾリノン、eDTA二ナトリウム
-な
- なし
私の試みはこの方向に向かっていました:

final String oldregex = "([\\W]*\\b[A-Z\\d]\\w+\\b[\\W]*)+";
final String regex = "([A-Z][\\d\\w]+( [A-Z][-\\d\\w]+)*, )*[A-Z][-\\d\\w]+( [A-Z][-\\d\\w]+)*\\.";'
実際に「oldregex」オプションを使用すると、一部のテキストで不定計算に遭遇しました これを使用して正規表現をテストします: http://gskinner.com/RegExr/ (もちろん二重バックスラッシュなし)

助けてくれてありがとう!!!

4

4 に答える 4

6

正規表現

実際に見てみましょう:

^(?:[^A-Za-z]*[A-Z][^\s,]*)*[^A-Za-z]*$

説明

^                # start of the string
(?:              # this group matches a "word", don't capture the group
  [^A-Za-z]*     # skip any non-alphabet characters at start of the word
  [A-Z]          # force an uppercase letter as a first letter
  [^\s,]*        # match anything but word separators (\s and ,) after 1th letter
)*               # the whole line consists of such "words"
[^A-Za-z]*       # skip any non-alphabet characters at the end of the string
$                # end of the string

注:単語の区切り文字が空白やコンマと異なる場合は、正規表現を変更できます。(たとえば、または使用するものに変更[^\s,][^,:-]ます)

于 2012-08-30T17:34:12.743 に答える
1

これをテストした

^([^A-Za-z]*[A-Z][A-Za-z]*)+?$

テストケースで動作します

編集:

^([^A-Za-z]*?[A-Z][A-Za-z]*?)+.?

パフォーマンスの問題

于 2012-08-30T18:10:14.047 に答える
1

これが私が欲しかったものです:大文字の単語と文字 Java の一致

"^((^|[^A-Za-z]+)[A-Z][A-Za-z]*)*[^A-Za-z]*$"

于 2012-08-31T13:24:41.177 に答える
0

このようなものは正しいようです:

\b[^a-zA-Z,\s]*?[A-Z][^,\s]*?(\b|,)

s は単語の\b境界に一致します。[^a-zA-Z]*?では、文字以外のプレフィックスを使用できます。次に、単一の大文字に を使用し[A-Z]、その後に大文字以外の文字を使用し[^A-Z,\s]*?ます。

于 2012-08-30T17:32:32.733 に答える