簡體   English   中英

PHP Regular從字符串中提取部分

[英]PHP Regular extract parts from a string

我已經在C#中創建了一個正則表達式,但是現在嘗試在PHP中運行它時我很掙扎。 我以為它們的工作原理相同,但顯然不同。 有誰知道需要進行哪些更改才能使其正常工作?

這樣做的目的是確保字符串的格式為“名字的姓氏(公司名稱)”,然后提取字符串的各個部分。

C#代碼:

string patternName = @"(\w+\s*)(\w+\s+)+";
string patternCompany = @"\((.+\s*)+\)";
string data = "Firstname Lastname (Company Name)";

Match name = Regex.Match(data, patternName);
Match company = Regex.Match(data, patternCompany);

Console.WriteLine(name.ToString());
Console.WriteLine(company.ToString());
Console.ReadLine();

PHP代碼(無法正常工作):

$patternName = "/(\w+\s*)(\w+\s+)+/";
$patternCompany = "/\((.+\s*)+\)/";
$str = "Firstname Lastname (Company Name)";

preg_match($patternName, $str, $nameMatches);
preg_match($patternCompany, $str, $companyMatches);

print_r($nameMatches);
print_r($companyMatches);

似乎在這里工作。 您應該意識到的是,當您在正則表達式中捕獲匹配項時,PHP生成的數組將包含與整個模式匹配的完整字符串,以及每個捕獲組。

對於您的姓名/公司名稱,您需要使用

$nameMatches[1] -> Firstname
$nameMatches[2] -> Lastname
and
$companyMatches[1] -> Company Name

這是捕獲小組所匹配的。 兩者的[0]元素是整個字符串。

可能是因為您使用的是雙引號。 PHP可能會攔截您的轉義序列並刪除它們,因為它們未被識別。

您的模式的確會提取所需的信息。 嘗試將兩個print_r()行替換為:

print "Firstname: " . $nameMatches[1] . "\n";
print "Lastname: " . $nameMatches[2] . "\n";
print "Company Name: " . $companyMatches[1] . "\n";

這個輸出有什么問題嗎?

Firstname: Firstname 
Lastname: Lastname 
Company Name: Company Name

暫無
暫無

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

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