3 回答
TA貢獻1820條經驗 獲得超3個贊
考慮到示例字符串的格式,您可以使用重復組并使用 2 個捕獲組,其中第一個包含月份名稱,第二個是最后出現的 1 個或多個數字
^(?:[A-Za-z]+ \d+(?:-\d+)?(?:, \d+(?:-\d+)?)*, )*([A-Za-z]+)(?: \d+(?:-\d+)?,)* (?:\d+-)?(\d+)$
解釋
^字符串的開始(?:非捕獲組[A-Za-z]+ \d+匹配 1+ a-zA-Z、空格和 1+ 數字(?:-\d+)?可選擇匹配連字符和 1+ 位數字(?:, \d+(?:-\d+)?)*,重復 0+ 次匹配逗號、1+ 位數字和可選的連字符和 1+ 位數字)*關閉非捕獲組,重復 0+ 次(捕獲組 1[A-Za-z]+)(?: \d+(?:-\d+)?,)*關閉第 1 組,重復 0+ 次并匹配一個空格(?:\d+-)?匹配可選的 1+ 位數字和連字符(\d+)捕獲第 2 組,匹配 1+ 個數字$字符串結束
TA貢獻1864條經驗 獲得超2個贊
一種不同的方法,不是更好或更壞(在我看來)是將字符串分成幾部分,然后選擇你需要的。
這樣做的好處是將所有內容都放在數組中,因此您可以很容易地選擇其他月份和日期。
$str = 'September 14-20, 26, 28-30, October 1-8, 10, 11, 15-20, 24, November 25, 28-30';
//Explode on [' ', ',', ', ', '-']
$arr = explode(" ", str_replace(['-', ', '], ' ', $str));
$months = preg_grep("/\D+/", $arr); // find the months
$LastMonth = end($months);
$LastDay = end($arr);
var_dump($LastMonth, $LastDay); //November, 30
https://3v4l.org/GiqtI
這也可以這樣編寫,您可以使用 substr 和 strpos 重新創建完整的月份字符串或選擇范圍 (28-30) 中的最后幾天,或者像這樣發布最后一個月的內容:
https://3v4l。組織/PBAXU
TA貢獻1877條經驗 獲得超6個贊
我們可以preg_match在這里嘗試使用:
$input = "September 14-20, 26, 28-30, October 1-8, 10, 11, 15-20, 24, November 25, 28-30";
preg_match('/.*\b([A-Za-z]+).*\b(\d+)$/', $input, $matches);
echo "month is: " . $matches[1] . "\n";
echo "last day is: " . $matches[2];
這打?。?/p>
month is: November
last day is: 30
- 3 回答
- 0 關注
- 205 瀏覽
添加回答
舉報
