php - 用于解析斜体文本的正则表达式?

标签 php regex parsing italic

假设我有以下文本:

__This_is__ a __test__

使用两个下划线表示斜体。所以我希望 This_istest 为斜体。逻辑规定两个连续双下划线之间的任何文本都应为斜体,包括可能存在的任何其他数量的下划线。我有:

__([^_]+)__

第 1 组中“不是两个连续的下划线”相当于什么?谢谢。

最佳答案

一个选项是匹配两个下划线:

__

然后进行负向查找,看看当前位置前面是否没有两个下划线:

__(?!__)

如果不是这种情况,则匹配任意字符:

__(?!__). 

并重复前一次或多次:

__((?!__).)+

最后匹配另外两个下划线:

__((?!__).)+__

这是最终的解决方案。

一个小演示:

<?php
$text = '__This_is__ a __test__';
preg_match_all('/__(?:(?!__).)+__/', $text, $matches);
print_r($matches);
?>

产生:

Array
(
    [0] => Array
        (
            [0] => __This_is__
            [1] => __test__
        )

)

Ideone所示.

编辑

请注意,我在演示中使用了非捕获组,否则输出将如下所示:

Array
(
    [0] => Array
        (
            [0] => __This_is__
            [1] => __test__
        )

    [1] => Array
        (
            [0] => s
            [1] => t
        )

)

((?!__).) 匹配的最后一个字符将在组 1 中捕获。

有关组的更多信息,请参阅:http://www.regular-expressions.info/brackets.html

关于php - 用于解析斜体文本的正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4874748/

相关文章:

php - codeigniter - 在 View 中检索 Controller 变量(使用 $this)

php - 从字符串中删除重复的连续单词

c# - 适用于 A-Za-z0-9 撇号、空格和带范围的连字符的适当正则表达式

php - 从 php 网站检索数据到 Android 应用程序

php - 使用alter table时是否需要mysql real escape?

php - mysqli_begin_transaction()和mysqli_autocommit有什么区别

php - 我们如何像在 PHP 中一样在 C++ 中实现具有不同数据类型的值的映射?

javascript - 使用正则表达式提取字符后的所有组

php - 如何将 XML 数据解析为 PHP 变量

c# - 解析或提取 html 表的内容