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 目前是这样的:

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 一起使用。这样,我基本上可以在 RegEx 小时之前提取所有内容,而不必担心复杂的 RegEx 行。:

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

2 回答 2

3

为什么不:

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

这应该捕获x hrs/w部分之前的所有字符。

为了进一步解释,这只是创建一个捕获组,其中包含它在看到之前找到的任何内容:一个空格、一个或多个数字、另一个空格,然后是序列“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 回答