匹配文本的php正则表达式
我需要一个phpregex来匹配在下面的文本中前面没有名称“Total”或“max”不区分大小写的文本匹配文本的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
[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马克”