次の文字列があります。
findByHouseByStreetByPlain
各「By」の後の値にどのように一致させることができますか。最初の「By」値を見つけることができましたが、「By」の後の値に一致するすべての値を取得することができません。
次の文字列があります。
findByHouseByStreetByPlain
各「By」の後の値にどのように一致させることができますか。最初の「By」値を見つけることができましたが、「By」の後の値に一致するすべての値を取得することができません。
この正規表現はあなたのために働くはずです:
<?php
$ptn = "#(?:By([A-Za-z]+?))(?=By|$)#";
$str = "findByByteByHouseNumber";
preg_match_all($ptn, $str, $matches, PREG_PATTERN_ORDER);
print_r($matches);
?>
これが出力になります:
Array
(
[0] => Array
(
[0] => ByByte
[1] => ByHouseNumber
)
[1] => Array
(
[0] => Byte
[1] => HouseNumber
)
)
先読みのいくつかの使用はそれを行います
By(.*?)(?=By|$)
PHPでは、これは次のようになります
preg_match_all('/By(.*?)(?=By|$)/', $subject, $result, PREG_SET_ORDER);
for ($matchi = 0; $matchi < count($result); $matchi++) {
for ($backrefi = 0; $backrefi < count($result[$matchi]); $backrefi++) {
# Matched text = $result[$matchi][$backrefi];
}
}
以下のコードを試してください。
$pattern = "/[^By]+/";
$string = "findByHouseByStreetByPlain";
preg_match_all($pattern, $string, $matches);
var_dump($matches);