我正在尝试使用两种不同的模式匹配一个字符串来协同工作 我的源代码字符串是这样的:
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 来匹配任何字符以及空格和新行。
答案 0 :(得分:0)
您可以这样使用:
preg_match_all('/(.*)((\^<[^>]*>)|([^\^]<[^>]*>))$/', $string, $matches);
在此处查看:http://regexr.com?383g9
在另一个链接中,它正常工作:http://regex101.com/r/eQ3vV7
答案 1 :(得分:0)
您可以按照以下正则表达式进行操作:
(?s)(.*)((\^|(?<!\^))<[^>]+>)
PHP代码:
preg_match_all('/(?s)(.*)((\^|(?<!\^))<[^>]+>)/', $string, $matches);