簡體   English   中英

如何在php正則表達式中逐行匹配字符串?

[英]How to match a string line by line in php regex?

我有多個換行符的字符串,每個新行都包含一個新的子字符串。

這是兩行字符串的示例:

 $x="Hello
       World!

您可以看到HelloWorld在第一行 在換行符中。

每個子字符串以換行符或空格或空格開頭或結尾。

我要匹配這兩行。

我的課程代碼與第二行匹配,而忽略了第一行。

 if(preg_match_all("/^\n*\s*(Hello|World!)\s*$/i",$x,$m))

 {print_r($m);}

有什么辦法可以解決此問題,以便兩行都可以匹配?

if(preg_match_all("/(Hello|World!)/i",$x,$m))
{
 print_r($m);
}

如果用戶^ $,則僅匹配整行。 因此,Hello部分在Hello之前沒有\\ n * \\ s *,因此不會匹配。 如果您像上面那樣更改腳本,它將只查找單詞,而不會在單詞之前或之后有任何東西。

希望能有所幫助。

嘗試這個

 $x="Hello    
 world! ";

preg_match_all("#\b(Hello|World!)\b#",$x,$m) ;

echo count($m)

輸出量

2

Phpfiddle預覽

我不確定“目標”是什么,但是此正則表達式將匹配這兩行。 我將您的Hello | World更改為(。+?),因為它可以匹配任何字符,因此如果您要解析代碼,則可以匹配變量。

/^(.+?)[\n,\s,\t]{1,8}(.+?)$/

這是您使用新正則表達式的示例,因此,如果我誤解了,您可以看到發生了什么。

<?php 

 $x="Hello
      World!";

 if(preg_match_all("/^(.+?)[\n,\s,\t]{1,8}(.+?)$/i",$x,$m))

 {print_r($m);}

?>

如果要解析多個序列,則需要確定第一行和第二行之間有哪些潛在字符,然后修改{1,8}以適合空格,制表符,換行符等。

暫無
暫無

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

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