[英]Is start ^ and end $ required for multiple regex patterns
如果給定[name=anystring]
或#anystring
,其中anystring
是已刪除任何空格的字符串,我希望返回anystring
。
在嘗試兩者之前,我分別成功地執行了它們。
$pattern = "/^#(.+)$/";
preg_match($pattern, '#anystring', $matches);
preg_match($pattern, '[name=anystring]', $matches);
$pattern = "/^\\[name=(.+)\\]$/";
preg_match($pattern, '#anystring', $matches);
preg_match($pattern, '[name=anystring]', $matches);
然后我嘗試將它們結合起來。
# with start ^ and end $ on both
$pattern = "/^#(.+)$|^\\[name=(.+)\\]$/";
preg_match($pattern, '#anystring', $matches);
preg_match($pattern, '[name=anystring]', $matches);
# without start ^ and end $ on both
$pattern = "/^#(.+)|\\[name=(.+)\\]$/";
preg_match($pattern, '#anystring', $matches);
preg_match($pattern, '[name=anystring]', $matches);
當我“有點”獲得所需的內容時,第二個模式[name=(.+)]
返回一個包含三個元素的數組。
我應該在第一個模式之后加上$
並在第二個模式之前將^
結束嗎? 這是否可以導致第二個模式返回包含三個元素的數組?
編輯。 顯示一個版本如何顯示更多數組元素
<?php
$pattern = "/^(?:#(.+)|\\[name=(.+)\\])$/s";
preg_match($pattern, '#anystring', $matches);
print_r($matches);
preg_match($pattern, '[name=anystring]', $matches);
print_r($matches);
(
[0] => #anystring
[1] => anystring
)
Array
(
[0] => [name=anystring]
[1] =>
[2] => anystring
)
您可以使用一個非捕獲組來組合2個正則表達式:
(?:pattern1 | pattern2)
我寫了這個正則表達式,它將捕獲兩個字符串:
(?:\\[\\w+=(?<bracketword>\\w+)\\]|\\#(?<word>\\w+))
您的匹配項將包含數組鍵括號或單詞。 在下面的regex101鏈接上進行檢查。
https://regex101.com/r/AmgHTS/1/
如果願意,還可以使用開始和結束字符串^和$。 在我編輯過的正則表達式中,我的測試字符串是兩行(每個字符串一個),因此我也必須使用多行標志。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.