目前正在处理一些问题。这是我的字符串“all-days” 我需要一些帮助来创建一个正则表达式来捕获第一个字符,短划线以及短划线后的第一个字符。我是Regex的新手,请原谅我。
这是我到目前为止所得到的。 (^)。
答案 0 :(得分:1)
捕获第一个字符,破折号以及第一个 短划线后的字符
使用preg_match
功能:
$s = "all-days";
preg_match('/^(.)[^-]*(-)(.)/', $s, $m);
unset($m[0]);
print_r($m);
输出:
Array
(
[1] => a
[2] => -
[3] => d
)
答案 1 :(得分:1)
它不是正则表达式但是如果您只想通过其他方式获得解决方案,可以通过explode
,array_walk
和implode
$string = 'all-days-with-my-style';
$arr = explode("-",$string);
$new = array_walk($arr,function(&$a){
$a = $a[0];
});
echo implode("-",$arr);
输出为:a-d-w-m-s
答案 2 :(得分:0)
\b(\w|-\b)
为了获得更高的精度,可以使用以下内容(请注意,它使用的是Unicode组,因此它不适用于所有语言,但它适用于PHP)。这只会匹配字母,而不是数字和下划线。它使用负面的lookbehind和积极的前瞻,但是你可以理解它,如果你继续阅读这篇文章,并将其分开一次。
(\b\p{L}|(?<=\p{L})-(?=\p{L}))
\b
在字边界处断言位置(\w|-\b)
将以下内容捕获到捕获组1中
\w
匹配任何单词字符|
或-
字面上匹配-
字符\b
在字边界处断言位置 \b
:
^\w
断言字符串开头的位置并匹配单词字符\w$
匹配单词字符并断言其位置为字符串\W\w
匹配任何非单词字符,后跟单词字符\w\W
匹配任何单词字符,后跟非单词字符 \w
:
a-zA-Z0-9_
中的任何字符定义),但是,某些语言也接受表示任何字母,数字或下划线的Unicode字符{{1} })。\p{L}\p{N}_
(对于ASCII字母),[a-zA-Z]
表示Unicode字母或{{1}带有\p{L}
标志的ASCII字符,并在正则表达式中启用不区分大小写的标志。答案 3 :(得分:0)
我假设你的字符串只包含单词字符和连字符,并且没有连续的连字符:
要删除所有不是连字符的第一个字符及其后的第一个字符,请删除不在字边界之后的所有字符:
$result = preg_replace('~\B\w+~', '', 'all-days');
如果您只想匹配这些字符,只需在字边界后捕捉每个字符:
if ( preg_match_all('~\b.~', 'all-days', $matches) )
print_r($matches[0]);