在preg_replace中检测行的开头和行尾

时间:2014-08-18 11:29:58

标签: php regex preg-replace

$data = $_POST['data'];

echo '<form method="post"><textarea name="data"></textarea><input type="submit">';

echo preg_replace( "#/*[?+]/n#", "[h1]$1[/h1]",$str );

是否可以preg_replace检测一行的开头,并根据开头的几个字符将某个html代码应用于整行?

这里,基于*,如果数据是:

*This is row one
//output <h1>This is row one</h1>

**This is row two
//output <h2>This is row two</h2>

***This is row three
//output <h3>This is row three</h3>

***This is row * three
//output <h3>This is row * three</h3>

This is row * three
//output This is row * three

我正在检测行的开头和行的结尾,并在行中的文本周围包裹标签。

我不需要在匹配的行之间有任何*。我的失败之情包括在内。你能帮忙吗?

2 个答案:

答案 0 :(得分:1)

代码:

$str = "*This is row one\n**This is row two\n***This is row three\n***This is row * three\nThis is row * three"; 

$result = preg_replace('/^\*([^*].*)$/m', '<h1>$1</h1>', $str);

$result = preg_replace('/^\*{2}([^*].*)$/m', '<h2>$1</h2>', $str);

$result = preg_replace('/^\*{3}([^*].*)$/m', '<h2>$1</h2>', $str);

答案 1 :(得分:1)

有关详细信息,请参阅http://www.regular-expressions.info/anchors.html

// replace *** with h3
$str = preg_replace('/^\*{3}([^\*].*)$/', '<h3>$1</h3>', $str);

// replace ** with h2
$str = preg_replace('/^\*{2}([^\*].*)$/', '<h2>$1</h2>', $str);

// replace * with h1
$str = preg_replace('/^\*([^\*].*)$/', '<h1>$1</h1>', $str);

说明:*是正则表达式中的特殊字符,因此必须对其进行转义,如下所示:\*

^\*在字符串的开头搜索*[^\*]搜索任何非*的内容 - 方括号用于搜索一类字符,而^表示“不是”#39}。因此,要搜索***而不匹配****,我们使用表达式/^\*{3}[^\*]/