1

私はこの問題に数日間取り組んできましたが、それが私を夢中にさせ始めています。私は正規表現を使用するのは快適ですが、これは私を逃れているようです。
文字のセットが存在する場合は文字列を一致させる必要があります。そうでない場合は、行の終わりに一致する必要があります。

例:次の例から「コンテンツ」を取得しようとしています。

$str1="title:content @description"
$str2="title:content"
preg_match("/:(.*?)[(@)|(:)|(\*)]?$/",$str1,$content);
preg_match("/:(.*?)[(@)|(:)|(\*)]?$/",$str2,$content);

$ str1の出力: "content @description"

$ str2出力:"コンテンツ"

注:文字列の順序が異なるか、特殊文字(@、:、または*)が含まれていないか、特殊文字が含まれている可能性があるため、「行末」以外に一般的な「文字列の終わり」文字はありません。 "。

「or」ステートメント全体を条件付きにして、類似しているがまったく同じではない質問を含む大量の投稿を読むために、考えられるすべての組み合わせを試しました。

4

1 に答える 1

0

あなたは書ける:

preg_match("/:(.*?)(?:[@:*]|$)/", $str1, $content);

@:* (一致は、;を使用して、いずれかまたは文字列の終わりで終了することに注意して|ください。バージョンには[@:*]オプションがありますが、文字列の終わりが必須になります。)

または単に:

preg_match("/:([^@:*]*)/", $str1, $content);

(「コロンの後に、含まれていない0個以上の文字が続く」を意味します@:*)。

于 2012-07-26T17:45:05.960 に答える