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,空格之后的单词直到第一个波浪号。 然后,我需要捕获波浪号之间的所有文本。

首先,我

不是正则表达式最强的,但是如果不捕获波浪号,我就很难让它工作。

您可以使用

'/^(-?'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)匹配。 -160 匹配文字数字,[1-5]?[0-9]匹配 1 到 5 之间的一个或零(可选(数字(如果允许使用前导零,则替换为 [0-5]?(,然后任何一位数字都可以跟在后面。