1

私が探している正規表現にはさまざまな要件があり、複雑すぎて自分で解決できません。

次の要件を持つ特定の文字列を検索する必要があります。

  1. 「fu:」で始まり「」で終わる文字列

  2. これらの開始要件と終了要件の間に、次の要件を持つ他の文字列が存在する可能性があります。

    2.1. 50文字未満

    2.2. 小文字のみ

    2.3. 末尾のスペースなし

    2.4. 「fu:」と他の文字列の間にスペースを入れないでください。

正規表現の結果は、ケース番号 1 が一致するが、ケース番号 2./2.1/2.2/2.3/2.4 が一致しないケースである必要があります。

現時点では、次の regex:があります。これは、次のような大文字"fu:([^"]*?[A-Z][^"]*?)"で始まる文字列"fu:と終わる文字列を検索します。"

"fu:this String is wrong cause the s from string is upper case"

すべてが理にかなっていることを願っています。私は正規表現に入ろうとしましたが、この問題は毎日正規表現を扱っていない人にとっては複雑に思えます。

[編集]

どうやら私は十分に明確ではありませんでした。「間違った」試合がしたい。この正規表現の補数を探しています: "fu:(?:[az][az ]{0,47}[az]|[az]{0,2})"

いくつかの例:

マッチ:「ふ:これはマッチです」

マッチ:「ふ:これはマッチです」

一致: 「ふ:これは一致です」

NO Match: 「ふ:これはマッチしません」

申し訳ありませんが、説明するのは簡単ではありません:)

4

4 に答える 4

2

次のことを試してください。

"fu:([a-z](?:[a-z ]{0,48}[a-z])?)"

"fu:これは、a で始まりa で終わる任意の文字列と一致し"、それらの間の文字列には 1 ~ 50 文字が含まれます。小文字のみで、スペースで始まることも、末尾にスペースを含めることもできません。

"fu:                    # begins with "fu:
(                       # group to match
    [a-z]               # starts with at least one character
    (?:                 # non-matching sub-group
        [a-z ]{0,48}    # matches 0-48 a-z or space characters
        [a-z]           # sub-group must end with a character
    )?                  # group is not required
)
"                       # ends with "

EDIT : 空の文字列も一致させる必要がある場合、つまり完全な文字列がの場合は、正規表現で一致するグループの最後に"fu:"別の文字列を追加できます。?

"fu:([a-z](?:[a-z ]{0,48}[a-z])?)?"

小さな違いを示すために、2 つの正規表現 (文字列に 1 ~ 50 文字を許可するものと 0 ~ 50 文字を許可するもの) を分けておきました。

編集 #2 : 上記の逆に一致させるには、つまり、必要な形式に一致しないすべての文字列を検索するには、次を使用できます。

^((?!"fu:([a-z](?:[a-z ]{0,48}[a-z])?)?").)*$

これは、そのパターンに一致しない行明示的に一致します。その結果、これは - を含まない行にも一致します"fu:

上記の反対を真に一致させ、さらに and のアンカーを含めることができる唯一の方法は、"fu:失敗"したルールに明示的に一致させようとすることです。

"fu:([^a-z].*|[^"]{51,}|[a-z]([^"]*?[A-Z][^"]*?)+|[a-z ]{0,49}[ ])"

この正規表現は、小文字以外で始まるa-z文字列、50 文字を超える文字列、大文字を含む文字列、または末尾に空白がある文字列に一致します。追加のルールごとに、正規表現を更新して必要なものとは逆にする必要があります。

私の推奨事項は、使用している言語に関係なく、実際に要件に従っているすべての入力文字列に一致することです。一致する文字列がない場合、その文字列はルールに違反している必要があります。

于 2012-08-14T14:02:17.117 に答える
0

これを試して:

"fu:(?:[a-z][a-z ]{0,47}[a-z]|[a-z]?)"
于 2012-08-14T14:01:29.753 に答える
0
"fu:([^A-Z" ](?:[^A-Z"]{0,48}[^A-Z" ])?)"

上記の正規表現は、指定された要件に一致する必要があります。

于 2012-08-14T14:02:09.947 に答える
0

それはおそらくあなたが必要とするものです

"fu:([a-z](?:[a-z ]{,48}[a-z])?)"
于 2012-08-14T14:12:33.923 に答える