1

私の正規表現はここに書かれていて、どのように変更しても機能しません。文字を置き換えてください。3語または8語の文字列のリストがあります。特定の文字または文字列をヒットしたときに正規表現を切り取る簡単な方法はありますか?私が何を意味するかをお見せしましょう: これが私が扱う文字列のいくつかの例です:

WKT8100 Cooperative Education Work Term Preparation 15 hrs/w
CST8259 Web Programming Languages II 5 hrs/w
CST8265 Web Security Basics 5 hrs/w
CST8267 Ecommerce 4 hrs/w

文字列からコース名とIDのみを抽出し、必要な時間数を省略したいので、次のようにします。

WKT8100 Cooperative Education Work Term Preparation

リターンとして。

私の正規表現は現在次のようなものです:

RegEx = "/[a-zA-Z]{3}[0-9]{4}[A-Z]{0,1}\s[a-zA-Z]{3,20}\s[a-zA-Z]{0,20}\s[a-zA-Z]{0,20}\s[a-zA-Z]{0,20}\s/";

私は時間を正しく抽出する正規表現なので、substrで使用できるメソッドがある場合は多分。そうすれば、基本的に正規表現の営業時間前にすべてを抽出でき、複雑な正規表現行について心配する必要はありません。

HoursRegEx = "@\s[0-9]{1,2}?\shrs\/w@i";
4

2 に答える 2

3

なぜだめですか:

/(.*) \d+ hrs\/w/

これにより、パーツの前のすべての文字がキャプチャされますx hrs/w

もう少し説明すると、これは、スペース、1つ以上の数字、別のスペース、そしてシーケンス「hrs / w」など、表示される前に見つかったものをすべて含むキャプチャグループを作成するだけです。終わりの部分の前に何があるかは気にしないので、なぜそれを認識しようとするのですか?

于 2012-10-02T21:52:52.693 に答える
0

常に「hrs/w」で終わる場合は、次のように実行できます。

$string = "WKT8100 Cooperative Education Work Term Preparation 15 hrs/w";
$string = trim($string)
$lastSpace = strrpos($string, " ");
$string = trim(substr($string, 0, $lastSpace));
$lastSpace = strrpos($string, " ");
$hours = trim(substr($string, $lastSpace));
$nameID = trim(substr($string, 0, $lastSpace));

これは、正規表現を使用せずに頭のてっぺんから離れる方法です。最初に広範囲にわたる再調査を行わずに、正規表現を提供することはできません。

psジョーダンはずっときれいに見えます。

于 2012-10-02T21:59:21.933 に答える