[英]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.