正则表达式模式匹配除最后一个之外的任何字符

时间:2014-01-23 01:20:51

标签: php regex preg-match-all

我正在尝试使用两种不同的模式匹配一​​个字符串来协同工作 我的源代码字符串是这样的:

Text, white-spaces, new lines and more text then ^^^^<customtag>

我需要获得一个组(第二个),它将捕获一个插入符号,或者没有一个格式化的HTML标记。因此,第一组将捕获任何其他内容 这意味着上面的字符串应输出:

(Group 1) Text, white-spaces, new lines and more text then ^^^

(Group 2) ^<customtag>

在源字符串中,插入符号可以是一个,没有或最多两千个 我需要一个匹配所有这些插入符号除了最后一个之外的良好模式。
下面的代码是我试过的。

preg_match_all('/([\s\S]*\^*)(\^?<\w+>)$/', $string, $matches);


请注意:我使用[\s\S]代替 dot 来匹配任何字符以及空格和新行。

2 个答案:

答案 0 :(得分:0)

您可以这样使用:

preg_match_all('/(.*)((\^<[^>]*>)|([^\^]<[^>]*>))$/', $string, $matches);

在此处查看:http://regexr.com?383g9

在另一个链接中,它正常工作:http://regex101.com/r/eQ3vV7

答案 1 :(得分:0)

您可以按照以下正则表达式进行操作:

(?s)(.*)((\^|(?<!\^))<[^>]+>)

Live demo

PHP代码:

preg_match_all('/(?s)(.*)((\^|(?<!\^))<[^>]+>)/', $string, $matches);