$str = "check-me-01";
if(preg_match("#(\d){0,}$#",$str)) {
$strArr = preg_split("#(\d){0,}$#",$str,2);
print_r($strArr);
}
上記のスクリプトを使用して、任意の数値の文字列から01を取得しています。しかし、私はいつも得ます
配列([0] => check-me- [1] =>)
誰かがこれで私を助けることができますか?
$str = "check-me-01";
if(preg_match("#(\d){0,}$#",$str)) {
$strArr = preg_split("#(\d){0,}$#",$str,2);
print_r($strArr);
}
上記のスクリプトを使用して、任意の数値の文字列から01を取得しています。しかし、私はいつも得ます
配列([0] => check-me- [1] =>)
誰かがこれで私を助けることができますか?
その文字列から01を取得しようとしている場合は、preg_splitではなくpreg_matchのみを使用する必要があります。そのリンクにアクセスして、結果の一致を取得する方法を調べてください。
引用:
int preg_match(string $ pattern、string $ subject [、array&$ matches [、int $ flags = 0 [、int $ offset = 0]]])
注&$matches
。それはあなたがもっと詳しく見たいものです。
preg_splitは、区切り文字として一致するものをすべて消費します。これが、直面している問題です。したがって、一致するものはすべて結果の配列には含まれず、どちらかの側にあるものだけが含まれます。
ポジティブルックアヘッドを使用する必要があります
私もPOSIXブラケットを使用しました
$str = "check-me-01";
if (preg_match("#[[:digit:]]$#",$str)) {
// the regex matches a zero length string, so just the position when it is true
// the (?=regex) triggers a positive lookahead
// it is true in this case, if you have many digits at the end of the string
$strArr = preg_split("#(?=[[:digit:]]+$)#",$str,2);
print_r($strArr);
}