【发布时间】:2017-04-10 19:34:41
【问题描述】:
我正在使用 str_replace 来“清理”我不想要的单词,这样我可以为团队创建一个时间表。然而,每次我需要删除更多的单词,所以我最终每天都编辑文件。我想使用正则表达式,但我不能只获得团队名称。所以我想将团队添加到一个数组中,只获取团队名称,从而清除垃圾词。
所以它会是这样的:
Boston Celtics vs. Brooklyn Nets
也就是说,如果我可以将其格式化为包含“vs”。两队之间。否则就只是
Boston Celtics Brooklyn Nets
这是我用来删除单词的代码。
<?php
$name1 = array("Spectrum Center","Charlotte, NC","Bankers Life Fieldhouse","Indianapolis, IN","Wells Fargo Center","Philadelphia, PA","Quicken Loans Arena","Cleveland, OH","bc","Chesapeake Energy Arena","Oklahoma City, OK","Toyota Center","Houston, TX","American Airlines Center","Dallas, TX","GAME PREVIEWBUY TICKETS","United Center","Chicago, IL","Target Center","Target Center","Staples Center","Los Angeles, CA","Minneapolis, MN","Amway Center","Orlando, FL","TD Garden","Boston, MA","Palace of Auburn Hills","Detroit, MI","Pepsi Center","Denver, CO","Vivint Smart Home Arena","Salt Lake City, UT","Talking Stick Resort Arena","Phoenix, AZ","Air Canada Centre","Toronto, ON","Barclays Center","Brooklyn, NY","FedExForum","Memphis, TN","ORACLE Arena", "Oakland, CA","Golden 1 Center","Sacramento, CA","Smoothie King Center","New Orleans, LA","BMO Harris Bradley Center","Milwaukee, WI","Philips Arena","Atlanta, GA","Madison Square Garden","New York, NY","AmericanAirlines Arena","Miami, FL","AT&T Center","San Antonio, TX","Verizon Center","Washington, DC","FOX SPORTS SOUTHEAST - CHARLOTTE","FS FLORIDA","WFNZ 610 AM","ESPN 580 / SALSA 98.1 FM (ESP)","WGN-TV","ROOT","WLS-AM 890 / WRTO 1200 (ESP)","790 AM","FSI","1070 THE FAN NORTH","CSN BAY AREA","830 WCCO","95.7 GAME SOUTHEAST","TSN2",'92.9 "THE GAME"',"TSN RADIO 1050 TORONTO ALTITUDE","CSNHD","KKSE 950AM","98.5 HUB FSSW","YES","103.3 ESPN","WFAN CSN-CA","CSN","KHTK 1140 1500 ","FOX SPORTS WISCONSIN","FSI","AM 620 WTMJ","1070 THE FAN","FS NORTH","CSN BAY AREA","830 WCCO","95.7 THE GAME","FOX SPORTS SOUTHEAST","TSN2","92.9 FM",'"THE GAME"',"TSN RADIO 1050 TORONTO","ALTITUDE","CSNHD","KKSE 950AM","98.5 THE SPORTS HUB","FSSW"," YES","103.3 ESPN","WFAN","-CA","CSN","TSN2","KHTK SPORTS 1140 AM","1500 AM","NBATV CANADA","FS OKLAHOMA HD","WWLS 98.1FM OKC / 930AM (ESP)","KZNS","PRIME TICKET","TCN-PHI","AM 570 LA SPORTS","97.5 THE FANATIC","FS DETROIT","MSG","105.1 WMGC-FM","ESPN NY 98.7","FSNOLA","WRNO 99.5FM","FSOHIO","WTAM 1100 / 100.7 WMMS / 87.7 FM (ESP)","FS-SUN","SPORTSNET ONE","SPORTSNET ONE","790 THE TICKET / S: WAQI 710 AM","SPORTSNET 590 THE FAN","WOAI 1200AM","WMFS","FSAZ","ARIZONA SPORTS 98.7FM / KSUN 1400AM (ES)","NWHD","RIP CITY RADIO 620","OR","SPE/SPECD","710 AM ESPN / 1330 AM ESPN DEPTES","WLS 890AM","KGWHD","-CHICAGO","CW35 HD","TSNN","TSN1/4","790 THE TICKET","/ S:","WRTO MIX 98.3 FM","TSN4/5","740 AM","100.7 WMMS / 87.7 FM (ESP)");
$name = $_POST["teamname"];
$name = str_replace($name1,"",$name);
$name = str_replace(",","",$name);
$name = str_replace("\n\n", '<br />', $name);
$name = str_replace("\r\n\r\n", '<br />', $name);
if(isset($_POST["teamname"])){
echo $name;
}
?>
有没有更好的方法来获得我正在寻找的结果。
编辑:
我使用this答案中的代码将日程表的字符串变成一个数组。但是,我在与从另一个答案(忘记链接)得到的正则表达式循环交互时遇到了困难,而它们都是分开工作的。我需要先将它分解成一个数组,然后将该数组传递给另一个循环中的正则表达式。如何同时使用这两个循环?
这是我目前所拥有的。
<?php
$search = array("Boston Celtics","Brooklyn Nets","New York Knicks","Philadelphia 76ers","Toronto Raptors","Golden State Warriors","LA Clippers","Los Angeles Lakers","Phoenix Suns","Sacramento Kings","Chicago Bulls","Cleveland Cavaliers","Detroit Pistons","Indiana Pacers","Milwaukee Bucks","Dallas Mavericks","Houston Rockets","Memphis Grizzlies","New Orleans Pelicans","San Antonio Spurs","Atlanta Hawks","Charlotte Hornets","Miami Heat","Orlando Magic","Washington Wizards","Denver Nuggets","Minnesota Timberwolves","Oklahoma City Thunder","Portland Trail Blazers","Utah Jazz","7:30 PM","7:00 PM");
$results= array(
"7:00 PM ET
CSN, FSI, 97.5 THE FANATIC, 1070 THE FAN
Indiana Pacers
Philadelphia 76ers",
"7:30 PM ET
CSNHD, YES, 98.5 THE SPORTS HUB, WFAN
Brooklyn Nets
Boston Celtics",
"7:30 PM ET
FS-SUN, FSOHIO, SN, 790 THE TICKET / S: WRTO MIX 98.3 FM, WTAM 1100 / 100.7 WMMS / 87.7 FM (ESP)
Cleveland Cavaliers
Miami Heat",
"Excepteur sint occaecat cupidatat non proident"
);
foreach ($results as $result) {
$pattern = "/\b(" . implode('|', $search) . ")\b/i";
$found = preg_match_all($pattern, $result, $matches);
$time = $matches[0][0];
$team1 = $matches[0][1];
$team2 = $matches[0][2];
if ($found) {
echo $time." ".$team1." vs ".$team2."<br />";
}
}
$t = "7:00 PM ET
CSN, FSI, 97.5 THE FANATIC, 1070 THE FAN
Indiana Pacers
Philadelphia 76ers
Wells Fargo Center
Philadelphia, PA
GAME PREVIEWBUY TICKETS
7:30 PM ET
CSNHD, YES, 98.5 THE SPORTS HUB, WFAN
Brooklyn Nets
Boston Celtics
TD Garden
Boston, MA
GAME PREVIEWBUY TICKETS
7:30 PM ET
FS-SUN, FSOHIO, SN, 790 THE TICKET / S: WRTO MIX 98.3 FM, WTAM 1100 / 100.7 WMMS / 87.7 FM (ESP)
Cleveland Cavaliers
Miami Heat
AmericanAirlines Arena
Miami, FL";
$pieces = explode("TICKETS", $t);
$teans = '';
foreach($pieces as $cat) {
$cat = trim($cat);
$teans .= "<category>" . $cat . "</category>\n";
echo $cat."<br />";
}
?>
【问题讨论】:
-
你如何定义你想要的东西并用
preg_match_all抓住它。 -
你能给我们展示实际输入的例子吗(不是你用代码写的测试用例)。输入中是否有实际的换行符?看起来输入的结构是可预测的,因此您可以避免使用正则表达式。
-
@MikeBrant 这将是你从 NBA 网站 7:00 PM ET CSN、FSI、97.5 THE FANATIC、1070 THE FAN Indiana Pacers Philadelphia 76ers Wells Fargo Center Philadelphia 76ers Wells Fargo Center 复制后的样子 lie=ke , PA GAME PREVIEWBUY TICKETS 所以我要做的是在 TICKETS 之后爆炸,这两个 for 循环都单独工作,但我需要使用爆炸循环创建的数组并通过它寻找匹配项