匹配文本的php正则表达式

匹配文本的php正则表达式,php,regex,pcre,Php,Regex,Pcre,我需要一个phpregex来匹配在下面的文本中前面没有名称“Total”或“max”不区分大小写的文本 [1] [1m] [1mk][1mks] [1mark] [1marks] (1mk) 12mk 12 mark 13 mark [Total: 15] Total: 16 mark Total 1 mark Total 12 mark Total: 9 mark Total: 10 mark [Total: 11 marks] Total 6 mark maximum 5 marks m

我需要一个phpregex来匹配在下面的文本中前面没有名称“Total”或“max”不区分大小写的文本

[1]
[1m]
[1mk][1mks]
[1mark]
[1marks]
(1mk) 
12mk

12 mark
13 mark
[Total: 15]
Total: 16 mark
Total 1 mark
Total 12 mark
Total: 9 mark
Total: 10 mark
[Total: 11 marks] Total 6 mark
maximum 5 marks
maximum:5 marks
注:此文本排成一长行


正则表达式应与以下内容匹配

[1]
[1m]
[1mk][1mks]
[1mark]
[1marks]
(1mk) 
12mk

12 mark
13 mark
我试过这个,但不起作用

/(?<!Total\:\s|Total\s|maximum\s|maximum\:\s)[\[|\(]?([0-9]{1,2})(\s|(?=marks|mark|mks|mk|m|\]))?(\]|marks|mark|mks|mk|m)[\]|\)]?/i
/(?
编辑

编辑2
e、 g'12 mark'只应在其不是“总计[:]\s+12 mark”或“最大[:]\s+12 mark”时返回尝试以下操作:
(?:\[?\b(?:总计|最大值):?\s?\d+\s?[^]+(*跳过)(*失败));(\d++\s?[^)\]*)

(使用
i
gnore案例。)

解释 第一部分
  • (?:\[?
    可能有
    [
  • \b
    边界
  • (?:总计|最大值)
    与任一文本匹配的非捕获组
  • :?\s?\d+\s?
    可能是一个
    可能是一个空格,一些数字,可能是另一个空格
  • [^]+
    一堆非空格
  • (*SKIP)(*FAIL))|
    Plot twist:任何匹配第1部分的内容都会失败
第二部分
  • 这是真的
  • \d++\s?
    数字,后面可能跟一个空格
  • [^)\]*
    可能是不是空格的东西,
    ,或者
    ]

PHP应该如下所示:

preg_match_all(
  '/(?:\[?\b(?:Total|maximum):?\s?\d+\s?[^ ]+(*SKIP)(*FAIL))|(\d++\s?[^ )\]]*)/i', 
  "YOUR STRING",
  $matches
);

print_r($matches[0]);

实际上,我会选择两步解决方案。首先用以下regexp替换无用的单词:

    (Total:?\s?|maximum:?\s?)
然后,匹配您真正需要的所有内容很容易:

    \[?\(?([0-9]{1,2}\s?marks?|[0-9]{1,2}\s?mk?s?)\)?\]?

不知道如何使用debuggex.com,但我在pspad中测试了所有正则表达式,因此它肯定能正常工作。

预期的输出取决于什么规则?您可以尝试使用正则表达式,这对理解您正在编写的内容非常有帮助。正则表达式应匹配以下[1][1m][1mk][1mk][1mark][1mark][1mark](1mk)12马克12马克13分mark@Telewa是的,我知道。但是为什么呢?换句话说,根据什么?就像我需要从文本中获得单个标记,而不是总标记。但是不起作用。你可以在这里尝试,然后提供链接,如果它工作,我没有看到的部分,你说,这是所有的一行,但我已经相应地修复了它。它现在应该可以工作了。([[]?)(总计|最大值)(?:\:)?\s*[0-9]{1,2}(\s)?([]?)将选择我不想要的。现在请选择其他。请看这里,只需要数字吗?我不知道你最后的评论是什么意思。您尝试过我的更新解决方案吗?我想要所有其他解决方案,例如:“[1][1m][1mk][1mk][1mark][1mark](1mk)12mk 12 mark 13 mark”在一个数组中。然而,这些无用的词语也有需要去除的痕迹。和他们在一起。如果我能做到这一点,那肯定没问题。我该怎么做?@Telewa结果和你描述的一模一样。什么标记?像[()]这样的字符?例如,“12马克”只应返回,而不是“总计[\:]\s+12马克”或“最大[\:]\s+12马克”