Jump to page: 1 2
Thread overview
Where do you test syntax of D regexp online?
Mar 09, 2017
Suliman
Mar 09, 2017
rikki cattermole
Mar 09, 2017
Suliman
Mar 09, 2017
rikki cattermole
Mar 09, 2017
Suliman
Mar 09, 2017
Suliman
Mar 09, 2017
Adam D. Ruppe
Mar 09, 2017
Suliman
Mar 09, 2017
Adam D. Ruppe
Mar 10, 2017
Suliman
Mar 10, 2017
Suliman
Mar 09, 2017
rikki cattermole
March 09, 2017
I wrote two regexp:

--------------------
auto inlineCodeBlock = regex("`(.*?)`"); // -->  `(.*?)`
auto bigCodeBlock = regex("/`{3}[\\s\\S]*?`{3}/g"); // -->  `{3}[\s\S]*?`{3}
--------------------
First for for selection inline code block. Second for multi-line:
--------------------
#Header
my header text

##SubHeader
my sub header text `foo inline code`

```
void foo()
{
   writeln("ppp");
}
```

###Sub3Header
my sub 3 text `bar inline code`

#Header2
my header2 text
--------------------

It's work fine in online editor https://regex101.com/r/EC5WRu/1 (sic! \\s\\S double escaped in D code).

But after compilation of code:

auto x = content.matchFirst(bigCodeBlock);
writeln(x);


print:
[]
[]

It's seems that D regexp work in another way. How can I test them?

March 10, 2017
On 10/03/2017 3:50 AM, Suliman wrote:
> I wrote two regexp:
>
> --------------------
> auto inlineCodeBlock = regex("`(.*?)`"); // -->  `(.*?)`
> auto bigCodeBlock = regex("/`{3}[\\s\\S]*?`{3}/g"); // -->
> `{3}[\s\S]*?`{3}
> --------------------
> First for for selection inline code block. Second for multi-line:
> --------------------
> #Header
> my header text
>
> ##SubHeader
> my sub header text `foo inline code`
>
> ```
> void foo()
> {
>    writeln("ppp");
> }
> ```
>
> ###Sub3Header
> my sub 3 text `bar inline code`
>
> #Header2
> my header2 text
> --------------------
>
> It's work fine in online editor https://regex101.com/r/EC5WRu/1 (sic!
> \\s\\S double escaped in D code).
>
> But after compilation of code:
>
> auto x = content.matchFirst(bigCodeBlock);
> writeln(x);
>
>
> print:
> []
> []
>
> It's seems that D regexp work in another way. How can I test them?

I would use dpaste and write a quick script but here is where I think your problem is:

regex("/.*/g")

It should be:

regex(".*", "g")

As per[0].

[0] http://dlang.org/phobos/std_regex.html#.regex
March 09, 2017
> I would use dpaste and write a quick script but here is where I think your problem is:
>
> regex("/.*/g")
>
> It should be:
>
> regex(".*", "g")
>
> As per[0].
>
> [0] http://dlang.org/phobos/std_regex.html#.regex

Sorry, but what regexp are you talking? There is nothing like: `regex("/.*/g")` in my code...

March 10, 2017
On 10/03/2017 4:17 AM, Suliman wrote:
>> I would use dpaste and write a quick script but here is where I think
>> your problem is:
>>
>> regex("/.*/g")
>>
>> It should be:
>>
>> regex(".*", "g")
>>
>> As per[0].
>>
>> [0] http://dlang.org/phobos/std_regex.html#.regex
>
> Sorry, but what regexp are you talking? There is nothing like:
> `regex("/.*/g")` in my code...
>

Yes there was:

auto bigCodeBlock = regex("/`{3}[\\s\\S]*?`{3}/g");
March 09, 2017
On Thursday, 9 March 2017 at 15:22:00 UTC, rikki cattermole wrote:
> On 10/03/2017 4:17 AM, Suliman wrote:
>>> I would use dpaste and write a quick script but here is where I think
>>> your problem is:
>>>
>>> regex("/.*/g")
>>>
>>> It should be:
>>>
>>> regex(".*", "g")
>>>
>>> As per[0].
>>>
>>> [0] http://dlang.org/phobos/std_regex.html#.regex
>>
>> Sorry, but what regexp are you talking? There is nothing like:
>> `regex("/.*/g")` in my code...
>>
>
> Yes there was:
>
> auto bigCodeBlock = regex("/`{3}[\\s\\S]*?`{3}/g");

I still can't get it work in real code :(
March 09, 2017
Adding "r" helped:

auto bigCodeBlock = regex(r"`{3}[\s\S]*?`{3}");

But now output is:
[["```\r\nvoid foo()\r\n{\r\n\twriteln(\"ppp\");\r\n}\r\n```"]]

But I do not \r\n\ symbols...
March 09, 2017
On Thursday, 9 March 2017 at 16:14:28 UTC, Suliman wrote:
> But now output is:
> [["```\r\nvoid foo()\r\n{\r\n\twriteln(\"ppp\");\r\n}\r\n```"]]
>
> But I do not \r\n\ symbols...

That's just the writeln array formatter. The matchFirst function returns an array of hits (that allows captures, btw you might need to use \( instead of ( to get the capture, god i hate regex) so writeln tries to print the whole array and that's how it does embedded newlines.

So you have the correct result, just written strangely.
March 10, 2017
On 10/03/2017 5:14 AM, Suliman wrote:
> Adding "r" helped:
>
> auto bigCodeBlock = regex(r"`{3}[\s\S]*?`{3}");
>
> But now output is:
> [["```\r\nvoid foo()\r\n{\r\n\twriteln(\"ppp\");\r\n}\r\n```"]]
>
> But I do not \r\n\ symbols...

\r\n is Windows new line characters.
March 09, 2017
On Thursday, 9 March 2017 at 16:23:23 UTC, Adam D. Ruppe wrote:
> On Thursday, 9 March 2017 at 16:14:28 UTC, Suliman wrote:
>> But now output is:
>> [["```\r\nvoid foo()\r\n{\r\n\twriteln(\"ppp\");\r\n}\r\n```"]]
>>
>> But I do not \r\n\ symbols...
>
> That's just the writeln array formatter. The matchFirst function returns an array of hits (that allows captures, btw you might need to use \( instead of ( to get the capture, god i hate regex) so writeln tries to print the whole array and that's how it does embedded newlines.
>
> So you have the correct result, just written strangely.

How should I write to file result without \r\n\ symbols?

auto x = content.matchFirst(bigCodeBlock);

File f = File("foo.txt", "w");
f.write(x);

foo.txt:
["```\r\nvoid foo()\r\n{\r\n\twriteln(\"ppp\");\r\n}\r\n```"]
March 09, 2017
On Thursday, 9 March 2017 at 16:40:13 UTC, Suliman wrote:
> How should I write to file result without \r\n\ symbols?
>
> auto x = content.matchFirst(bigCodeBlock);
>
> File f = File("foo.txt", "w");
> f.write(x);

Just

f.write(x[0]);


to write out the whole hit instead of the collection of references.

« First   ‹ Prev
1 2