Php 用字符本身和连字符替换字符的正则表达式
我需要将一些camelCase字符替换为camelCase字符和Php 用字符本身和连字符替换字符的正则表达式,php,regex,string,Php,Regex,String,我需要将一些camelCase字符替换为camelCase字符和- 我得到的是这样一根线: Albert-Weisgerber-Allee 35 Bruninieku iela 50-10 这些字符串通过这个正则表达式将数字与街道分开: $data = preg_replace("/[^ \w]+/", '', $data); $pcre = '\A\s*(.*?)\s*\x2f?(\pN+\s*[a-zA-Z]?(?:\s*[-\x2f\pP]\s*\pN+\s*[a-zA-Z]?)*)\s
-
我得到的是这样一根线:
Albert-Weisgerber-Allee 35
Bruninieku iela 50-10
这些字符串通过这个正则表达式将数字与街道分开:
$data = preg_replace("/[^ \w]+/", '', $data);
$pcre = '\A\s*(.*?)\s*\x2f?(\pN+\s*[a-zA-Z]?(?:\s*[-\x2f\pP]\s*\pN+\s*[a-zA-Z]?)*)\s*\z/ux';
preg_match($pcre, $data, $h);
现在,我有两个问题
-
,在德国和欧洲有很多这样的名称- & matched Camel Case letter
除了第一个大写字母外
我找到了一个正则表达式,它显示了需要粘贴连字符的位置,如下所示:
.[A-Z]{1}/ug
但我究竟该如何替换这根弦:
AlbertWeisgerberAllee
变成
Albert-Weisgerber-Allee
只需使用捕获组:
(.)([A-Z]) //removed {1} because [A-Z] implicitly matches {1}
并替换为$1-$2
请参见在caps使用此正则表达式之前插入破折号:
$string="AlbertWeisgerberAllee";
$string=preg_replace("/([a-z])([A-Z])/", "\\1-\\2", $string);
你似乎把表达过于复杂了。您可以使用以下命令将
-
置于除第一个大写字母以外的任何大写字母之前:
(.)(?=[A-Z])
只需将其替换为$1-
。基本上,这个正则表达式的作用是:
()
找到任何字符并将其放入组1(?=[A-Z])
查看是否后跟大写字符$1-
如果匹配,则替换为组1中的字符,后跟连字符所以,你所需要做的就是在大写字母前加一个连字符,对吗?是的,除了第一个@Anonymous之外,不要用另一个正则表达式修复一个错误正则表达式的输出,我建议你只修复第一个正则表达式(有可能),不要替换数字前面的
-
s。从头重写整个正则表达式。如果您还没有这样做,请遵循(冗长的)正则表达式教程,给自己一整天或更多的时间来学习正则表达式(这次忘记您的问题)。无论何时你需要正则表达式,它都会让你的编码生活少那么令人沮丧。@hoijui完全同意,完全按照你上周刚刚推荐的那样做了。你说得很对,知道正则表达式是如何工作的值这么多…这与阿尔伯特韦斯格伯雷的说法不符。@Anonymous那不是卡梅尔凯斯的。。。所以不用担心。。这也应该变成Albert Wweigerber Allee
,这就是我的正则表达式所做的:)根据,camel case是“书写没有空格和首字母大写或小写字母的复合词或短语的约定,剩余的每个词元素都以大写字母开头”。但是,最终取决于他们打算询问的OP。:)在这种情况下,就像@karthikmanchala所说的,我一直在寻找的CamelCase就是他的regex匹配的