我需要将一些camelCase字符替换为camel Case字符和一个-。
我得到的是这样的一根绳子:
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);现在我有两个问题。
-,在德国和欧洲也有很多这样的名字。实际上,很容易调整regex,使其不切任何连字符,但我想了解regex是如何工作的,所以我决定尝试找到一个regex,它只需用字符串中的每个骆驼大小写字母替换。
- & matched Camel Case letter除了第一个大写字母出现。
我找到了一个正则表达式,它显示了需要粘贴连字符的位置,如:
.[A-Z]{1}/ug https://regex101.com/r/qI2iA9/1
但我到底该怎么替换这条绳子呢:
AlbertWeisgerberAllee 它变成了
Albert-Weisgerber-Allee发布于 2015-06-13 20:41:00
若要在大写之前插入破折号,请使用此正则表达式:
$string="AlbertWeisgerberAllee";
$string=preg_replace("/([a-z])([A-Z])/", "\\1-\\2", $string);发布于 2015-06-13 20:39:03
只需使用捕获组:
(.)([A-Z]) //removed {1} because [A-Z] implicitly matches {1}并替换为$1-$2
发布于 2015-06-13 20:42:04
你似乎把这句话复杂化了。除了第一个大写字母之外,您可以使用以下方法将-放在任何大写字母之前:
(.)(?=[A-Z])代之以$1-。基本上,这个regex所做的是:
(.)找到任何字符并将其放置在第一组中。(?=[A-Z])查看大写字符是否跟随。$1-如果匹配,用第1组中找到的字符替换,然后用连字符代替。https://stackoverflow.com/questions/30823253
复制相似问题