我需要帮助修改PHP markdown的正则表达式

时间:2010-08-01 00:38:18

标签: php regex markdown

我正在修改PHP Markdown(在Stack Overflow上使用的标记语言的PHP解析器),试图实现Jeff在this blog post中描述的第1,2和3点。我很容易完成最后两个,但这个证明非常困难:

  1. 删除了对单词内的支持 强调like_this_example
  2. 实际上,在“正常”降价实现中,like_this_example将呈现为 this 示例。这是非常不受欢迎的;我只想_example_成为示例

    我查看了源代码,发现正则表达式用于强调:

    var $em_relist = array(
        ''  => '(?:(?<!\*)\*(?!\*)|(?<!_)_(?!_))(?=\S|$)(?![.,:;]\s)',
        '*' => '(?<=\S|^)(?<!\*)\*(?!\*)',
        '_' => '(?<=\S|^)(?<!_)_(?!_)',
        );
    var $strong_relist = array(
        ''   => '(?:(?<!\*)\*\*(?!\*)|(?<!_)__(?!_))(?=\S|$)(?![.,:;]\s)',
        '**' => '(?<=\S|^)(?<!\*)\*\*(?!\*)',
        '__' => '(?<=\S|^)(?<!_)__(?!_)',
        );
    var $em_strong_relist = array(
        ''    => '(?:(?<!\*)\*\*\*(?!\*)|(?<!_)___(?!_))(?=\S|$)(?![.,:;]\s)',
        '***' => '(?<=\S|^)(?<!\*)\*\*\*(?!\*)',
        '___' => '(?<=\S|^)(?<!_)___(?!_)',
        );
    

    我试图在Regex Buddy打开它,但这还不够,经过半个小时的努力,我仍然不知道从哪里开始。有什么建议吗?

      有些人在面对的时候   问题,想想“我知道,我会用   正则表达式。“现在他们有   两个问题。

2 个答案:

答案 0 :(得分:3)

我也使用RegexBuddy。 :)

您可能需要尝试以下代码:

<?php

$line1 = "like_this_example";
$line2 = "I want only _example_ to become example";
$pattern = '/\b_(?P<word>.*?)_\b/si';

if (preg_match($pattern, $line1, $matches))
{
  $result = $matches['word'];
  var_dump($result);
}

if (preg_match($pattern, $line2, $matches))
{
  $result = $matches['word'];
  var_dump($result);
}

?>

答案 1 :(得分:2)

我只能通过以下方式获取单个_enclosed_个字词:

$input = 'test of _this_ vs stuff_like_this...and here is _anothermatch_ and_another_fake_string';
$pattern = '#(?<=\s|^)(?<!_)(_[^_]*_)(?!_)#is';
preg_match_all($pattern, $input, $matches);
print_r($matches);

我不确定这究竟是如何适合上述代码的。您可能需要将其与下面的其他模式配对以考虑两种和三种匹配情况:

$pattern = '#(?<=\s|^)(?<!_)(__[^_]*__)(?!_)#is';
$pattern = '#(?<=\s|^)(?<!_)(___[^_]*___)(?!_)#is';