Regexp for string,不应包含两个已知的字符

时间:2013-06-04 10:03:36

标签: php regex

例如

我有一个像"12345%67890"

这样的字符串

Regexp [^%]*给了我12345

如果我不需要使用"%",而是"<%",则如何获得相同的结果。
非常感谢。

更多信息: 我有一个很大的文字,我在%%之间进行了一些替换,比如%test%我使用preg_match_allpreg_replace更改了其他内容,但是如果使用%不是隔板,一切都崩溃了。例如:%test 90% test%,所以我决定将%更改为更复杂的内容,例如<% test 90% test %>

2 个答案:

答案 0 :(得分: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"
  }
}

答案 1 :(得分:0)

对我来说,你应该分手,而不是匹配:

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

输出:

Array
(
    [0] => 12345
    [1] => 67890
)