亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

可以為最后一個單詞和數字組合正則表達式嗎?

可以為最后一個單詞和數字組合正則表達式嗎?

PHP
慕絲7291255 2021-11-05 14:44:24
我有一個示例字符串,例如September 14-20, 26, 28-30, October 1-8, 10, 11, 15-20, 24, November 25, 28-30使用時(\w+)$,會捕獲30。是否可以使用單個表達式同時捕獲NovemberAND 30?
查看完整描述

3 回答

?
DIEA

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+ 個數字

  • $ 字符串結束

正則表達式演示


查看完整回答
反對 回復 2021-11-05
?
慕斯王

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


查看完整回答
反對 回復 2021-11-05
?
慕哥9229398

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


查看完整回答
反對 回復 2021-11-05
  • 3 回答
  • 0 關注
  • 205 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號