簡體   English   中英

正則表達式在 PHP 代碼中不起作用,但在沙箱中運行良好

[英]Regex not working in PHP code but working fine in the sandbox

我遇到了一個奇怪的情況。 我想從地址和我的正則表達式中獲取 ZIP 代碼

\b(\w+)\b[^\w]\p{L}+$

在沙箱https://regex101.com/r/rnjecA/1中工作,但使用相同的文本,它在 PHP https://sandbox.onlinephpfunctions.com/c/3eb95中不起作用,這是怎么回事?

您可以使用

$str = <<<AAA
County Road 99
Sauk Centre,  Minnesota 56378
USA
AAA;

if (preg_match('~(\w+)\R\p{L}+$~u', $str, $m)) {
  print_r($m);
}
// => Array( [0] => 56378\nUSA  [1] => 56378 )

請參閱PHP 在線演示

如果您不需要整個比賽而只需要 ZIP 作為 output,請將模式替換為

'~\w+(?=\R\p{L}+$)~u'

請參閱正則表達式演示

注意

  • (\w+)\R\p{L}+$ - 匹配並捕獲任何 Unicode 字字符(由於u標志),然后\R匹配任何 Unicode 換行序列,然后\p{L}+匹配一個或多個 Unicode 個字母(直到字符串結尾 ( $ )
  • \R解決了匹配 LF 或 CRLF 行尾的問題
  • 在使用 Unicode 屬性類和處理 Unicode 字符串時,請記住將u標志與 PHP PCRE/PCRE2 正則表達式一起使用。

暫無
暫無

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

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