4

これはCamelCase regexに関する質問です。tchrist 投稿の組み合わせで、正しいutf-8 CamelCase は何か疑問に思っています。

(brian d foy の) 正規表現から始めます。

/
    \b          # start at word boundary
    [A-Z]       # start with upper
    [a-zA-Z]*   # followed by any alpha

    (?:  # non-capturing grouping for alternation precedence
       [a-z][a-zA-Z]*[A-Z]   # next bit is lower, any zero or more, ending with upper
          |                     # or 
       [A-Z][a-zA-Z]*[a-z]   # next bit is upper, any zero or more, ending with lower
    )

    [a-zA-Z]*   # anything that's left
    \b          # end at word 
/x

および次のように変更します。

/
    \b          # start at word boundary
    \p{Uppercase_Letter}     # start with upper
    \p{Alphabetic}*          # followed by any alpha

    (?:  # non-capturing grouping for alternation precedence
       \p{Lowercase_Letter}[a-zA-Z]*\p{Uppercase_Letter}   ### next bit is lower, any zero or more, ending with upper
          |                  # or 
       \p{Uppercase_Letter}[a-zA-Z]*\p{Lowercase_Letter}   ### next bit is upper, any zero or more, ending with lower
    )

    \p{Alphabetic}*          # anything that's left
    \b          # end at word 
/x

「###」とマークされた行に問題があります。

さらに、数字とアンダースコアが小文字に相当するため、W2X3 が有効なキャメルケースの単語であると仮定した場合の正規表現の変更方法。

更新: (ysth コメント)

次のために、

  • any: 「大文字または小文字または数字またはアンダースコア」を意味します

正規表現は CamelWord、CaW と一致する必要があります

  • 大文字で始める
  • オプション
  • 小文字または数字またはアンダースコア
  • オプション
  • 大文字
  • オプション

重複していないため、重複としてマークしないでください。元の質問(および回答も)はASCIIのみを考えていました。

4

1 に答える 1

5

私はあなたが何をしようとしているのか本当にわかりませんが、これはあなたの本来の意図に近いはずです。しかし、私はあなたがそれをどうするつもりなのかまだわかりません。

m{
    \b
    \p{Upper}      #  start with uppercase code point (NOT LETTER)

    \w*            #  optional ident chars 

    # note that upper and lower are not related to letters
    (?:  \p{Lower} \w* \p{Upper}
      |  \p{Upper} \w* \p{Lower}
    )

    \w*

    \b
}x

絶対に使用しないでください[a-z]。そして実際には、\p{Lowercase_Letter}またはを使用しないでください。これらは、より望ましい、より正確なおよび\p{Ll}と同じではないためです。\p{Lowercase}\p{Lower}

\wそして、それは本当に単なるエイリアスであることを忘れないでください

[\p{Alphabetic}\p{Mark}\p{Decimal_Number}\p{Letter_Number}\p{Connector_Punctuation}]
于 2011-06-12T18:19:13.827 に答える