php - preg_match_all - 你如何創建一個字符串來匹配正則表達式?



regex documentation (2)

我需要創建一個格式化文檔。 我知道用於格式化正則表達式的正則表達式,但我不知道如何重現該正則表達式的示例。 這個應該是一個內部的聯繫:

'{\[((?:\#|/)[^ ]*) ([^]]*)\]}'

任何人都可以創建一個與此相匹配的例子,也許可以解釋他是如何得到它的。 我被困在'?'。

我從來沒有在開始時使用這個元字符,通常我用它來標記一個文字不能出現或只出現一次。

謝謝

https://ffff65535.com


(?:...)具有與(...)相同的分組效果,但不會“捕獲”該組的內容; 見http://php.net/manual/en/regexp.reference.subpatterns.php

所以, (?:\#|/)意思是“ #/ ”。

我猜你知道[^ ]*表示“零個或多個不是SP的字符”,而[^]]*表示“零個或多個不是右方括號的字符”。

把它放在一起,一個可能的字符串是這樣的:

'{[/abcd asdfasefasdc]}'

我認為這是一個很好的職位來幫助設計正則表達式。 雖然它相當容易寫一個
一般的正則表達式來匹配一個字符串,有時候它的幫助在後面翻看
其設計。 有時候有必要看看bizzar會匹配什麼。

當把許多元字符混合成文字時,對格式來說相當重要
這些便於閱讀和避免錯誤。

這裡有一些在Perl中的示例(對我來說)更容易原型。

my @samps = (
 '{[/abcd asdfasefasdc]}',
 '{[# ]}',
 '{[# /# \/]}',
 '{[/#  {[
    | /# {[#\/} ]}',
,
);

for (@samps) {
   if (m~{\[([#/][^ ]*) ([^]]*)\]}~)
   {
      print "Found: '$&'\ngrp1 = '$1'\ngrp2 = '$2'\n===========\n\n";
   }
}

__END__

Expanded

\{\[ 
  (
     [#/][^ ]*
  )
  [ ]
  (
     [^\]]*
  )
\]\}

產量

Found: '{[/abcd asdfasefasdc]}'
grp1 = '/abcd'
grp2 = 'asdfasefasdc'
===========

Found: '{[# ]}'
grp1 = '#'
grp2 = ''
===========

Found: '{[# /# \/]}'
grp1 = '#'
grp2 = '/# \/'
===========

Found: '{[/#    {[
        | /# {[#\/}     ]}'
grp1 = '/#      {[
        |'
grp2 = '/# {[#\/}       '
===========




match