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'

another demo

此处,第一组将-1到60的整数与(-1|[1-5]?[0-9]|60)交替组匹配。 -160 匹配文字数字,[1-5]?[0-9] 匹配从 1 到 5 的一个或零(可选)数字(如果允许前导零,则替换为 [0-5]?),然后可以跟随任何一位数字。