如何删除字符串中的单个字符?

时间:2015-10-14 17:56:11

标签: php regex

我有一些这种风格的字符串:

$var = "a - it is a string";       // I want this output: 'it is a string'
$var = "m - it is second string";  // I want this output: 'it is second string'

所以这是我的模式:

[single character in the first of string]<space>-<space>{anything} // I want just {anything}

我如何在PHP REGEX中执行此操作?

这是我的尝试(altought不起作用,我确定它真的远远不是我想要的)

preg_replace("/^\w\s+-\s+/","",$str);

编辑:

应该注意的是,我在现实中使用波斯人物。这里还有一个例子:

$var = 'ی - این یک متن تست است';

3 个答案:

答案 0 :(得分:2)

preg_replace('/^.\s-\s/', '', $var);

实时PHP演示

http://ideone.com/fvIKBE

正则表达式解释

^.\s-\s

Assert position at the beginning of a line «^»
Match any single character that is NOT a line break character «.»
Match a single character that is a “whitespace character” «\s»
Match the character “-” literally «-»
Match a single character that is a “whitespace character” «\s»

答案 1 :(得分:1)

首先,您需要将/w更改为\w。其次,为了匹配单个字符,您可以使用字符类(如果您只想匹配字母字符)并匹配其余字符您可以使用修饰符.后跟*

preg_replace("/^[a-z]\s+-\s+.*/","",$str);

另请注意,由于您使用了锚^来指定字符串的开头,因此如果您要处理多行字符串,则需要使用标记mg匹配全球。

preg_replace("/^[a-z]\s+-\s+.*/m","",$str);

请参阅演示https://regex101.com/r/gT9wB8/1

Reed更多关于正则表达式https://www.regular-expressions.info

如果您正在处理unicode字符串,可以使用标记u,使您的正则表达式引擎与unicode字符匹配。

另请注意,您需要更改字符的范围或使用仅匹配一个字符(但所有字符)的点.

'/^.\s+-\s+.*/mu'

或者:

'/^[\u0622-\u06cc]\s+-\s+.*/mu'

演示https://regex101.com/r/gT9wB8/2

答案 2 :(得分:1)

您可以使用:

^\p{L}  # match unicode letter at start
\h+     # match 1 or more horizontal space
-       # match 1 hyphen
\h+     # match 1 or more horizontal space

使用的正则表达式是:

/u

重要的是在此正则表达式中使用GetFieldType()修饰符来支持unicode。