Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex PascalCased单词的正则表达式(又名camelCased,带前导大写字母)_Regex_Search_Camelcasing_Pascalcasing - Fatal编程技术网

Regex PascalCased单词的正则表达式(又名camelCased,带前导大写字母)

Regex PascalCased单词的正则表达式(又名camelCased,带前导大写字母),regex,search,camelcasing,pascalcasing,Regex,Search,Camelcasing,Pascalcasing,如何查找文档中具有正则表达式的所有单词 如果您不知道Pascal大小写这个词,我只关心引导上驼峰大小写(即第一个字母大写的驼峰大小写单词) 假设是英语。如果您想使其国际化,请使用适当的字符类。这将匹配诸如“This”之类的词。如果您只想匹配至少两个大写字母的单词,只需使用 ([A-Z][a-z0-9]+){2,} 更新: 正如我在评论中提到的,更好的版本是: [A-Z]([A-Z0-9]*[a-z][a-z0-9]*[A-Z]|[a-z0-9]*[A-Z][A-Z0-9]*[a-z])[A-Z

如何查找文档中具有正则表达式的所有单词

如果您不知道Pascal大小写这个词,我只关心引导上驼峰大小写(即第一个字母大写的驼峰大小写单词)

假设是英语。如果您想使其国际化,请使用适当的字符类。这将匹配诸如“This”之类的词。如果您只想匹配至少两个大写字母的单词,只需使用

([A-Z][a-z0-9]+){2,}
更新: 正如我在评论中提到的,更好的版本是:

[A-Z]([A-Z0-9]*[a-z][a-z0-9]*[A-Z]|[a-z0-9]*[A-Z][A-Z0-9]*[a-z])[A-Za-z0-9]*
它匹配以大写字母开头、仅包含字母和数字、至少包含一个小写字母和至少一个其他大写字母的字符串

([A-Z][a-z\d]+)+
应该做的技巧,为上骆驼案。如果你还想考虑一些类似于上行驼峰的情况,你可以把它加上下划线。

< P>这似乎是这样做的:

/^[A-Z][a-z]+([A-Z][a-z]+)+/
我已经包括了Ruby单元测试:

require 'test/unit'

REGEX = /^[A-Z][a-z]+([A-Z][a-z]+)+/

class RegExpTest < Test::Unit::TestCase
  # more readable helper
  def self.test(name, &block)
    define_method("test #{name}", &block)
  end

  test "matches camelcased word" do
    assert 'FooBar'.match(REGEX)
  end

  test "does not match words starting with lower case" do
    assert ! 'fooBar'.match(REGEX)
  end

  test "does not match words without camel hump" do
    assert ! 'Foobar'.match(REGEX)
  end

  test "matches multiple humps" do
    assert 'FooBarFizzBuzz'.match(REGEX)
  end
end
要求“测试/单元”
正则表达式=/^[A-Z][A-Z]+([A-Z][A-Z]+)+/
类RegExpTest
Adam Crum的正则表达式很接近,但不匹配,例如
IFoo
HTTPConnection
。其他的不太确定,但试试这个:

\b[A-Z][a-z]*([A-Z][a-z]*)*\b
关于数字、I18N、下划线等,与亚当的答案相同


您可以进行测试。

刚刚修改了@AdamCrume的一个建议:

([A-Z]+[a-z0-9]+)+
这将匹配
IFrame
,但不匹配
ABC
。匹配其他驼峰大小写的单词,例如
AbcDoesWork
,最重要的是,它还匹配至少没有另一个大写字母的简单单词,例如
Frame


你觉得这个版本怎么样?我是否遗漏了一些重要案例?

解决我问题的regexp(正确命名FitNesse DbFit web服务将识别的目录)是:

我反向设计了这些特定的CamelCase规则,它们是:

1. First character uppercase alpha
2. Next 1-n characters lowercase alphanumeric
3. Next character (n+1) uppercase alpha
4. Next 0 or more characters lowercase alphanumeric
No consecutive uppercase; no special characters.
Pattern may be repeated, e.g. NoChildLeftBehindSuite9102
表达式通过了我的测试,如下所示:

Camel01C is CamelCase syntax
Camel01c01 is not CamelCase syntax
Camel01C01 is CamelCase syntax
Camel01CC01 is not CamelCase syntax
Camel0a1c1 is not CamelCase syntax
Camel0a1C1 is CamelCase syntax
Camel0ac1b1C1 is CamelCase syntax
CamelC is CamelCase syntax
CamelC1 is CamelCase syntax
CamelCA is not CamelCase syntax
CamelCa1 is CamelCase syntax
CamelCa_1 is not CamelCase syntax
IbsReleaseTestVerificationRegressionSuite is CamelCase syntax
IbsReleaseTestVerificationRegressioNSuite is not CamelCase syntax
IbsReleaseTestVerificationRegressioN is CamelCase syntax
下驼峰箱 此正则表达式包括number并实现了 正则表达式验证

[a-z]+((\d)|([A-Z0-9][a-z0-9]+))*([A-Z])?
  • 第一个字符是小写
  • 以下元素可以是单个数字,也可以是大写字符,后跟小写字符
  • 最后一个字符可以是大写字符
  • 下面是一个演示此正则表达式的示例。以下元素有效

    xmlHttpRequest
    newCustomerId
    innerStopwatch
    supportsIpv6OnIos
    youTubeImporter
    youtubeImporter
    affine3D
    
    XmlHttpRequest
    NewCustomerId
    InnerStopwatch
    SupportsIpv6OnIos
    YouTubeImporter
    YoutubeImporter
    Affine3D
    
    上驼峰箱 与用于小写的原则相同,始终以大写字母开头

    ([A-Z][a-z0-9]+)((\d)|([A-Z0-9][a-z0-9]+))*([A-Z])?
    
    下面是一个演示此正则表达式的片段。以下元素有效

    xmlHttpRequest
    newCustomerId
    innerStopwatch
    supportsIpv6OnIos
    youTubeImporter
    youtubeImporter
    affine3D
    
    XmlHttpRequest
    NewCustomerId
    InnerStopwatch
    SupportsIpv6OnIos
    YouTubeImporter
    YoutubeImporter
    Affine3D
    

    ([a-z0-9]+|[a-z0-9]+[a-z0-9]*.[a-z0-9][a-z0-9]*([a-z0-9][a-z0-9]*)
    Adam的更好,而且它通过了我写的所有测试。那么大写字符的子序列或以大写字符结尾的单词呢?如果只想匹配多个大写字符的单词,应该是这样的:([a-Z][a-z0 a-9]*){2,}是的,但这也匹配所有大写单词,这(IMO)不应该被视为驼峰。好的,那么:[A-Z]([A-Z0-9]*[A-Z][A-Z0-9]*[A-Z].[A-Z0-9]*[A-Z][A-Z0-9]*[A-Za-Z0-9]*它匹配以大写字母开头的字符串,只包含字母和数字,并且包含至少一个小写字母和至少一个其他大写字母。问题是这一个也会将
    Class
    检测为驼峰大小写单词。我只想指出,您描述的是PascalCase。CamelCase特别指第一个字母是小写的单词,后面的所有单词都以大写字母开头。显然,PascalCase这是CamelCase。CamelCase的大写正则表达式允许以开头的字符串numbers@HosseinAgha我做了一个更新,以排除倾斜的数字,谢谢你的反馈