まだPHPの正規表現(および一般的な正規表現)を学習しています。フィラーの非貪欲な試合からの試合を返す際に助けを求めます私はCalicoと呼ばれるオープンソースのCalDavクライアントに取り組んでいます。これはすぐにコミュニティにリリースされるはずです)。フィラーの貪欲でない試合からの一致の取得
私はhttp://txt2re.comを使ってこの正規表現を生成しましたが、どのように '$ re4 ='。*? 'でも検索する方法がわかりません。 #フィラーの貪欲でないマッチはキャッチすることを管理する。誰かが私を助けてくれますか?
$txt='BEGIN:VCALENDAR PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN VERSION:2.0 BEGIN:VTIMEZONE TZID:America/New_York X-LIC-LOCATION:America/New_York BEGIN:DAYLIGHT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 TZNAME:EDT DTSTART:19700308T020000 RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3 END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:-0400 TZOFFSETTO:-0500 TZNAME:EST DTSTART:19701101T020000 RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11 END:STANDARD END:VTIMEZONE BEGIN:VEVENT CREATED:20111219T194407Z LAST-MODIFIED:20091219T197731Z DTSTAMP:20111219T194431Z UID:c9bfc6b0-064e-4316-83fe-753db34e67ee SUMMARY:New Test DTSTART;TZID=America/New_York:20111219T150000 DTEND;TZID=America/New_York:20111219T160000 LOCATION:Philadelphia DESCRIPTION:Propfind test. END:VEVENT END:VCALENDAR ';
$re1='.*?'; # Non-greedy match on filler
$re2='(TZID)'; # Word 1
$re3='(:)'; # Any Single Character 1
$re4='.*?'; # Non-greedy match on filler
$re5='()'; # Any Single Character 2
if ($c=preg_match_all ("/".$re1.$re2.$re3.$re4.$re5."/is", $txt, $matches))
{
$test = $matches[0][0];
$word1=$matches[1][0];
$c1=$matches[2][0];
$c2=$matches[3][0];
print "($test) ($word1) ($c1) ($c2) \n";
}
私が興味を持ってtext「はTZID:アメリカ/ニューヨーク」です私はつかむしようとしています、の「アメリカ/ニューヨーク」部分。 TZIDは最終的に何か(非標準のタイムゾーンの可能性)になる可能性があるので、私はコロンから空白まですべてを取得しようとしています。
ニース。ありがとうございました。 – user978122