Php 需要帮助写正则表达式吗
以下是我正在处理的一些数据示例(我在旁边做了一些评论): 这些是课程表上的科目。第一个字母代表所教科目。之后是教师姓名的首字母缩写,用空格隔开。最后一个位置是建筑物和房间号 有时,在特定的时间教授几门课程 数据来自ics日历文件,我只是将其复制到这里。还需要考虑新行字符 我需要提取科目名称、教师姓名首字母和房间号,以便我可以使用它。关于如何进行有什么想法吗?一个完整的正则表达式模式将是理想的 我正在使用phpPhp 需要帮助写正则表达式吗,php,regex,Php,Regex,以下是我正在处理的一些数据示例(我在旁边做了一些评论): 这些是课程表上的科目。第一个字母代表所教科目。之后是教师姓名的首字母缩写,用空格隔开。最后一个位置是建筑物和房间号 有时,在特定的时间教授几门课程 数据来自ics日历文件,我只是将其复制到这里。还需要考虑新行字符 我需要提取科目名称、教师姓名首字母和房间号,以便我可以使用它。关于如何进行有什么想法吗?一个完整的正则表达式模式将是理想的 我正在使用php 谢谢您的帮助。我将排除这一行: FU MAT \n\nSKU BS06-309 我们
谢谢您的帮助。我将排除这一行:
FU MAT \n\nSKU BS06-309
我们这里有什么
:主题FU
:老师MAT
:?SKU
:房间BS06-309
(?:\s|\\n\\n)* # spaces or \n\n - not caught
(?<subject>\S+(?:\s[IVX]+\.?)?) # non-spaces plus I., II., III, IV... -> subject
(?:\s|\\n\\n)+ # spaces or \n\n - not caught
(?<teacher>\S+) # non-spaces -> teacher
(?:\s|\\n\\n)+ # spaces or \n\n - not caught
(?<room>\S+) # non-spaces -> room
(?:\s|\\n\\n)* # spaces or \n\n - not caught
+-------+----------+---------+----------+
| MATCH | SUBJECT | TEACHER | ROOM |
+-------+----------+---------+----------+
| 1 | TSG | MUM | BS06-312 |
| 2 | RQWE. | FKB | BS06-204 |
| 3 | NM. | JAK | BS06-E05 |
| 4 | DB. | FKB | BS06-312 |
| 5 | IGT. | resetk | Wender. |
| 6 | ENG I. | WEHN | BS06-E06 |
| 7 | ENG II | FLEM | BS06-203 |
| 8 | ITSI. | MUM | BS06-E02 |
| 9 | PQT. | RIE | BS11-QCR |
| 10 | PQT | MARK | BS11-QCR |
| 11 | PQT | FIS | BS11-QCR |
| 12 | INC | FEY | BS06-309 |
| 13 | ABS. | DOE | BS06 |
| 14 | ABS | VOG | BS06 |
| 15 | ABS | HEI | BS06 |
| 16 | ABS | MOR | BS06 |
| 17 | ABS | REM | BS06 |
| 18 | ABS | DEI | BS06 |
| 19 | ABS | THA | BS06 |
| 20 | ENG III. | GLIT | BS06-209 |
| 21 | ENG II | WANN | BS06-208 |
+-------+----------+---------+----------+
无论如何,对于块的其余部分,您可以使用此正则表达式:
(?:\s|\\n\\n)*(?<subject>\S+(?:\s[IVX]+\.?)?)(?:\s|\\n\\n)+(?<teacher>\S+)(?:\s|\\n\\n)+(?<room>\S+)(?:\s|\\n\\n)*
试试看:
(?:\s|\\n\\n)* # spaces or \n\n - not caught
(?<subject>\S+(?:\s[IVX]+\.?)?) # non-spaces plus I., II., III, IV... -> subject
(?:\s|\\n\\n)+ # spaces or \n\n - not caught
(?<teacher>\S+) # non-spaces -> teacher
(?:\s|\\n\\n)+ # spaces or \n\n - not caught
(?<room>\S+) # non-spaces -> room
(?:\s|\\n\\n)* # spaces or \n\n - not caught
+-------+----------+---------+----------+
| MATCH | SUBJECT | TEACHER | ROOM |
+-------+----------+---------+----------+
| 1 | TSG | MUM | BS06-312 |
| 2 | RQWE. | FKB | BS06-204 |
| 3 | NM. | JAK | BS06-E05 |
| 4 | DB. | FKB | BS06-312 |
| 5 | IGT. | resetk | Wender. |
| 6 | ENG I. | WEHN | BS06-E06 |
| 7 | ENG II | FLEM | BS06-203 |
| 8 | ITSI. | MUM | BS06-E02 |
| 9 | PQT. | RIE | BS11-QCR |
| 10 | PQT | MARK | BS11-QCR |
| 11 | PQT | FIS | BS11-QCR |
| 12 | INC | FEY | BS06-309 |
| 13 | ABS. | DOE | BS06 |
| 14 | ABS | VOG | BS06 |
| 15 | ABS | HEI | BS06 |
| 16 | ABS | MOR | BS06 |
| 17 | ABS | REM | BS06 |
| 18 | ABS | DEI | BS06 |
| 19 | ABS | THA | BS06 |
| 20 | ENG III. | GLIT | BS06-209 |
| 21 | ENG II | WANN | BS06-208 |
+-------+----------+---------+----------+
改进它强>
有时也有罗马数字:engi.
,engii
…我假设您只使用从1到39的数字,这就是为什么我只使用
[IVX]
。您可以通过添加L
、C
、M
来改进此部分。。。或者使用。为什么主题后面有时有点,有时没有?到目前为止,你提出了什么?我不知道这个点。有时候它就在那里。这就是我到目前为止所做的:$string=trim(preg_replace('/\s\s+/','$summary))$片段=分解(“,$string);//它的不一致性确实特别难以为每个案例获得好的结果。你能更详细地解释一下第一个特例吗?不同的信息用空格隔开。新行只是格式化而已。