我发疯了,一个正则表达式。 我有一个像这样的字符串:

%closed% closed (%closed_percent%\%), %open% open (%open_percent%\%)

我需要一个匹配以下内容的正则表达式:

%closed%
%closed_percent%
%open%
%open_percent%

但不是两个\\%

目前,我使用:

\%([^\%]+)\%

这给了我:

%closed%
%closed_percent%
%), %
% open (%
...

有人可以帮我吗?

#1楼 票数:2 已采纳

简单的方法:

%\w+%

符合项目: %foo%

允许(多个)反斜杠转义:

(?<!\\)(?:\\.)*%(\w+)%

仅匹配以下bar\\%foo% \\\\%bar% \\\\\\%baz%

...这也允许在其中进行转义:

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

匹配: %foo\\%bar%

将第一个捕获组的值与最后两个表达式一起使用。

#2楼 票数:1

尝试这个:

\%([^(\\\%)]+?)\%

火柴

%closed%
%closed_percent%
%open%
%open_percent%

为了我。

#3楼 票数:1

假设对百分比包装的令牌(包括转义字符)中的内容以及可以转义哪些字符(因此也可以转义反斜杠: \\\\%token%应该有效)没有任何限制,
这是您可以用来跳过转义字符的模式:

\\.|(%([^%\\]|\\.)+%)

这将捕获百分比包装的令牌,并将它们捕获在第一组( $1 )中。 转义的字符也将被匹配(跳过它们是一个很好的技巧),但是使用PHP可以很容易地获得相关的标记:

preg_match_all('/\\\\.|(%([^%\\\\]|\\\\.)+%)/', $str, $matches, PREG_PATTERN_ORDER);
$matches = array_filter($matches[1]);

工作示例: http : //ideone.com/dziCB

#4楼 票数:0

尝试:

~\%\w+\%~

因此,在选择中仅允许使用AZ和_。

$str = "%closed% closed (%closed_percent%\%), %open% open (%open_percent%\%)";

preg_match_all("~\%\w+\%~", $str, $matches);

$matches现在包含:

Array
(
    [0] => Array
    (
        [0] => %closed%
        [1] => %closed_percent%
        [2] => %open%
        [3] => %open_percent%
    )
)

#5楼 票数:0

在反斜杠后面添加否定的lookbehind! 这样, \\%就被忽略了。

(?<!\\)\%([^\%]+)(?<!\\)\%

火柴

%关闭%

%closed_percent%

%打开%

%open_percent%

  ask by Timo translate from so

未解决问题?本站智能推荐:

1回复

使用正则表达式从字符串中获取所有单词

我需要可以从字符串中找到所有单词的preg_match 。 例如: 我想得到这个: 我使用'/[az]+/ui' ,但是得到了:
1回复

正则表达式隔离变量字符串

我有一个很大的文本文件,需要从中推断PHP中的字符串。 有问题的文件可以在这里访问。 我需要删除的是“未Total Public Debt Outstanding行的第一列。 每天都会有所不同,这就是我需要帮助的地方。 Total Public Debt Outstanding清Tota
1回复

PHP正则表达式自定义变量在字符串中

我正在尝试使用预定义的命令创建一个基于语音的简单命令界面。 我遇到问题的具体部分是程序试图了解通过命令传递的参数时。 我有一些有效的代码,但是对于我想要的并不是理想的代码。 例如,我可能有一个如下检查天气的命令: 在伦敦英国天气是什么 可以识别的模式是: 在
4回复

使用正则表达式从URL获取字符串?

正则表达式是我的好消息,任何人都可以帮助我从URL中隔离字符串吗? 我想从URL中获取页面名称,该URL可以从输入表单中以下列任何方式显示: ... 等等。 我似乎无法找到一种方法来隔离.com/之前的字符串? (如果存在的话)。 它是preg_match,替换还是拆分?
1回复

如何使用正则表达式获取字符串的包装元素

可能重复: 使用preg_match php获取包装元素 我想获取包装指定字符串的元素,因此示例: 因此,我如何通过使用正则表达式模式匹配它来获取<p class='text'></p>来包装字符串。
4回复

如何使用正则表达式获取字符串的一部分?

这是我的字符串: http : //www.something.com/path/tt 0425235 / somethingelse / 而且我只需要获取“ 0425235”(在“ tt”和“ /”之间) 使用以下网址进行测试:http://rubular.com/
1回复

如何应用正则表达式从动态字符串中获取数字

我有一个可以包含一些变体的变量,它还包含一个可以是任何数字的数字。 变化: 这些是唯一的变化,除了其中的数字,它们可以改变。 我需要那个号码。 所以可以有: 或者 或者 我怎样才能从这些变化中得到数字? 如何使用正则表达式从上述示例中获得 9.075 或 5 或 8.25 或 3
3回复

正则表达式获取仅包含模式列表中的单词的字符串?

考虑以下数组元素 假设模式列表是ben,harry,clinton ,那么我应该得到的结果是 因此,基本上结果应该包含仅包含模式列表中的单词的字符串。 订单并不重要 此外,每个字符串不会超过两个单词。 即bensmith将永远不会是一个案例。 由于我的所有字符串都