簡體   English   中英

正則表達式捕獲組2捕獲與捕獲組1不匹配的內容

[英]Regex capture group 2 to capture what does not match capture group 1

我想捕獲組1中的所有者或生成器,否則,在組2中遇到直到連字符和/或空格后接數字的所有文本,然后從以下文本到組3中行尾的任何數字:

PRD Hervey Bay 07 2525 1919
RG Sprake & Co Maryborough 4141 2424
Owner Robert - 0429 966 391
Owner Maureen - 07 8888 4444 - 0422000 111
Owner Wayne - 0430 555 666
Builder Scott - 0444 555 777

我當前正在使用的表達式:-

/(Owner|Builder)([^-]+)-|\s+(\d.*)/gm

與組2中的“ PRD Hervey Bay”和“ RG Sprake&Co Maryborough”不匹配。

任何幫助表示贊賞!

特倫特。

您可以使用此正則表達式獲取所需的結果:

/^(Owner |Builder )?(.*?)(?=-| \d)[- ]+(.*)$/m

它查找(可選)字符串OwnerBuilder 后面跟一些最少的字符,直到-或空格后跟一個數字; 后面跟一些-或空格,然后是字符,直到行尾。 在PHP中使用:

$text = <<<EOD
PRD Hervey Bay 07 2525 1919
RG Sprake &amp; Co Maryborough 4141 2424
Owner Robert - 0429 966 391
Owner Maureen - 07 8888 4444 - 0422000 111
Owner Wayne - 0430 555 666
Builder Scott - 0444 555 777
EOD;
preg_match_all('/^(Owner |Builder )?(.*?)(?=-| \d)[- ]+(.*)$/m', $text, $matches);
print_r($matches);

輸出:

Array ( 
  [0] => Array (
    [0] => PRD Hervey Bay 07 2525 1919
    [1] => RG Sprake &amp; Co Maryborough 4141 2424
    [2] => Owner Robert - 0429 966 391
    [3] => Owner Maureen - 07 8888 4444 - 0422000 111
    [4] => Owner Wayne - 0430 555 666
    [5] => Builder Scott - 0444 555 777 
    )
  [1] => Array (
    [0] => 
    [1] =>
    [2] => Owner
    [3] => Owner
    [4] => Owner
    [5] => Builder
    )
  [2] => Array (
    [0] => PRD Hervey Bay
    [1] => RG Sprake &amp; Co Maryborough
    [2] => Robert
    [3] => Maureen
    [4] => Wayne
    [5] => Scott
    )
  [3] => Array (
    [0] => 07 2525 1919
    [1] => 4141 2424
    [2] => 0429 966 391
    [3] => 07 8888 4444 - 0422000 111
    [4] => 0430 555 666
    [5] => 0444 555 777
    )
  )

3v4l.org上的演示

請注意,這確實留有一些空間,並且-在最后一組中,您可以使用array_walk輕松刪除它們(如果需要):

array_walk($matches[3], function (&$v) { $v = preg_replace('/[^\d]/', '', $v); });

3v4l.org上的演示

暫無
暫無

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

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