我需要生成一个与以下格式匹配的正则表达式:
-1 LKSJDF LSAALSKJ~
Syjsdf
lkjdf
This block may contain multiple characters including digits, colons, etc. Any character other than a tilde.
~
我目前正在使用这个:
/(-'d|'d)'s([^$'~][a-zA-Z's]*)'~'n/s
这与第一行匹配。 我需要捕获开始模式的 -1 到 60,空格之后的单词直到第一个波浪号。 然后,我需要捕获波浪号之间的所有文本。
首先,我不是正则表达式最强的,但是如果不捕获波浪号,我就很难让它工作。
您可以使用
'/^(-?'d+)'s+([^~]*)~([^~]+)~/m'
查看演示
正则表达式匹配:
-
^
- 行的开头(由于/m
修饰符^
不再与字符串的开头匹配( -
(-?'d+)
- (第 1 组(后跟一位或多位数字的 1 或 0-
-
's+
- 一个或多个空格符号(要仅匹配制表符和常规空格,请改用'h+
( - 组 2(除
~
以外的零个或多个字符(只能通过将'n'r
添加到否定字符类 -[^~'n'r]
来强制匹配第一行中的这些字符( -
~
- 文字前导波浪号 -
([^~]+)
- (第 3 组(除波浪号以外的一个或多个字符 -
~
- 文字尾随波浪号
([^~]*)
- (如果只需要在数字是 -1 到 60 之间的整数时匹配这些字符串,则可以使用
'/^(-1|[1-5]?[0-9]|60)'s+([^~]*)~([^~]+)~/m'
观看其他演示
在这里,第一组将 -1 到 60 之间的整数与交替组(-1|[1-5]?[0-9]|60)
匹配。 -1
和 60
匹配文字数字,[1-5]?[0-9]
匹配 1 到 5 之间的一个或零(可选(数字(如果允许使用前导零,则替换为 [0-5]?
(,然后任何一位数字都可以跟在后面。