簡體   English   中英

多個正則表達式模式是否需要開始^和結束$

[英]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] =&gt; #anystring
    [1] =&gt; anystring
)
Array
(
    [0] =&gt; [name=anystring]
    [1] =&gt; 
    [2] =&gt; anystring
)

您可以使用一個非捕獲組來組合2個正則表達式:

(?:pattern1 | pattern2)

我寫了這個正則表達式,它將捕獲兩個字符串:

(?:\\[\\w+=(?<bracketword>\\w+)\\]|\\#(?<word>\\w+))

您的匹配項將包含數組鍵括號或單詞。 在下面的regex101鏈接上進行檢查。

https://regex101.com/r/AmgHTS/1/

如果願意,還可以使用開始和結束字符串^和$。 在我編輯過的正則表達式中,我的測試字符串是兩行(每個字符串一個),因此我也必須使用多行標志。

https://regex101.com/r/AmgHTS/2/

要捕獲兩者的anything ,請使用Lookbehind如下所示:

(?<=#|name=)([^\[#\]]+)

https://regex101.com/r/AmgHTS/4/

更多檢查:

https://regex101.com/r/AmgHTS/5

您正在尋找一個分支重置組 ,其中捕獲組的編號從該組之前的最后一個ID開始:

^(?|#(.+)|\[name=(.+)])$
  ^^

正則表達式演示

在此處輸入圖片說明

細節

  • ^ -字符串的開頭
  • (?| -分支重置組的開始
    • #(.+) -一個# ,然后是Group 1 capturin 1+字符,越多越好
    • | - 要么
    • \\[name= -一個[name=子字符串
    • (.+) -第1組(再次)盡可能匹配除換行符以外的1+個字符
    • ] -a ]
  • ) -分支重置組的結尾
  • $ -字符串結尾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM