0

例如

我有一个字符串"12345%67890"

Regexp [^%]*给我12345

"%"例如,如果我需要使用 not ,如何获得相同的结果"<%"
非常感谢。

更多信息:我有一个巨大的文本,我在其中进行了一些替换%%,就像我使用and%test%更改为其他内容一样,但是如果 % 不像分隔符那样使用,一切都会崩溃。例如:,所以我决定将 % 更改为更复杂的东西,例如preg_match_allpreg_replace%test 90% test%<% test 90% test %>.

4

2 回答 2

3

根据你的新信息,听起来你控制了输出,这让这一切都变得很奇怪。

无论如何,这是一个正则表达式,它将捕获您创建的包装器的内容:

<%(.+?)%>

注意?惰性匹配。

代码示例:

$string = "asdfar <%test123%>farasr%<5 sara><%90% is cool%%><%ooooaaaah%>>>%<%>%%";
preg_match_all('/<%(.+?)%>/', $string, $matches);
var_dump($matches);

输出:

array(2) {
  [0]=>
  array(3) {
    [0]=>
    string(11) "<%test123%>"
    [1]=>
    string(16) "<%90% is cool%%>"
    [2]=>
    string(13) "<%ooooaaaah%>"
  }
  [1]=>
  array(3) {
    [0]=>
    string(7) "test123"
    [1]=>
    string(12) "90% is cool%"
    [2]=>
    string(9) "ooooaaaah"
  }
}
于 2013-06-04T10:26:02.067 回答
0

在我看来,您应该进行拆分,而不是匹配:

$subject = "12345<%67890";
$result = preg_split('/<%/', $subject);
print_r($result);

输出:

Array
(
    [0] => 12345
    [1] => 67890
)
于 2013-06-04T11:06:52.997 回答