PHP:复杂的多行正则表达式,波浪线分隔符
PHP: Complex Multi-Line RegEx, Tilde delimeters
我需要生成一个匹配以下格式的正则表达式:
-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,space 之后的单词,直到第一个波浪号。然后我需要捕获波浪号之间的所有文本。
首先,我不是最擅长使用正则表达式的人,但我无法在不捕获波浪号的情况下让它工作。
你可以使用
'/^(-?\d+)\s+([^~]*)~([^~]+)~/m'
见demo
正则表达式匹配:
^
- 一行的开头(由于 /m
修饰符 ^
不再匹配字符串的开头)
(-?\d+)
-(第 1 组)一或零 -
后跟一个或多个数字
\s+
- 一个或多个空白符号(要仅匹配制表符和常规空格,请改用 \h+
)
([^~]*)
-(第 2 组)除 ~
之外的零个或多个字符(您可以通过在第一行添加 \n\r
来强制匹配这些字符否定字符 class - [^~\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]?
),然后可以跟随任何一位数字。
我需要生成一个匹配以下格式的正则表达式:
-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,space 之后的单词,直到第一个波浪号。然后我需要捕获波浪号之间的所有文本。
首先,我不是最擅长使用正则表达式的人,但我无法在不捕获波浪号的情况下让它工作。
你可以使用
'/^(-?\d+)\s+([^~]*)~([^~]+)~/m'
见demo
正则表达式匹配:
^
- 一行的开头(由于/m
修饰符^
不再匹配字符串的开头)(-?\d+)
-(第 1 组)一或零-
后跟一个或多个数字\s+
- 一个或多个空白符号(要仅匹配制表符和常规空格,请改用\h+
)([^~]*)
-(第 2 组)除~
之外的零个或多个字符(您可以通过在第一行添加\n\r
来强制匹配这些字符否定字符 class -[^~\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]?
),然后可以跟随任何一位数字。